Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/06/2010, 13:42
minette1988
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 10 meses
Puntos: 0
borrar un registro

Hola, quiero eliminar un registro.

1º Defino en al main la variable: int baja.
2º Dentro del switch pongo:

Código C:
Ver original
  1. case '7': { if(baja(pf) == 0) {
  2.                     /* El borrado ha sido correcto y abre el fichero */
  3.                     if((pf = fopen("tour_france.dat", "rb+")) == NULL) {
  4.                         perror("Fichero no accesible");
  5.                                 exit(3);
  6.                         }
  7.                      }
  8.                      else {
  9.                         printf("Error al eliminar un corredor, el fichero no se ha modificado,     compruebe sus datos\n");
  10.                      }
  11.                      break;
3º El subprograma que elimina un registro:

Código C:
Ver original
  1. int baja(FILE *pf){
  2.        char nombre[TAM_NOMBRE];
  3.        struct cliente cli;
  4.        int fallo = 0;
  5.        FILE *aux;
  6.  
  7.        if((pf=fopen("datos.dat","rb")) == NULL){
  8.           printf("\nError al abrir el fichero apuestas.dat\n");
  9.           exit(4);
  10.        }
  11.        rewind(pf); /* Pone el puntero al principio del fichero */
  12.        printf("Nombre del cliente a eliminar: ");
  13.        LEE_CAD(nombre,TAM_NOMBRE);
  14.        fread(&cli,sizeof(struct cliente),1,pf);
  15.        while(strcmp(cli.nombre, nombre != 0) && (!feof(pf))){
  16.            fwrite(&cli,sizeof(struct cliente),1,aux);
  17.            fread(&cli,sizeof(struct cliente),1,pf);
  18.        }
  19.        if(strcmp(cli.nombre, nombre == 0){
  20.            fread(&cli,sizeof(struct cliente),1,pf);
  21.            while(!feof(pf)){
  22.                fwrite(&cli,sizeof(struct cliente),1,aux);
  23.                fread(&cli,sizeof(struct cliente),1,pf);
  24.            }
  25.            if(fclose(aux) == EOF){
  26.                perror("Error al cerrar el fichero auxiliar de baja cliente");
  27.             fallo = 1;
  28.         }
  29.         else{
  30.             fclose(pf); /* Cierra el original */
  31.             remove("datos.dat"); /* Borra el original */
  32.             /* Renombra el auxiliar a fichero de datos */
  33.             rename("datos_aux.dat", "datos.dat");
  34.         }
  35.     }
  36.     else {
  37.         printf("\nCliente no encontrado\n");
  38.         fallo = 1;
  39.         fclose(aux);
  40.     }
  41.     return (fallo); /* Indica si el borrado ha sido correcto o no */  
  42. }

Cuando lo compilo aparte de darme fallos en otras partes del programa, me da fallos en el modulo baja. En el primer strcmp me dice: el paso del argumento 2 de ‘strcmp’ crea un puntero desde un entero sin una conversión.
En el main donde declaro el modulo int baja me dice: la declaración previa de ‘baja’ estaba aquí
¿Podéis ayudarme a averiguar dónde está el fallo?. Gracias.