Hola, quiero eliminar un registro.
1º Defino en al main la variable: int baja.
2º Dentro del switch pongo:
Código C:
Ver originalcase '7': { if(baja(pf) == 0) {
/* El borrado ha sido correcto y abre el fichero */
if((pf
= fopen("tour_france.dat", "rb+")) == NULL
) { perror("Fichero no accesible"); }
}
else {
printf("Error al eliminar un corredor, el fichero no se ha modificado, compruebe sus datos\n"); }
break;
3º El subprograma que elimina un registro:
Código C:
Ver originalint baja(FILE *pf){
char nombre[TAM_NOMBRE];
struct cliente cli;
int fallo = 0;
FILE *aux;
if((pf
=fopen("datos.dat","rb")) == NULL
){ printf("\nError al abrir el fichero apuestas.dat\n"); }
rewind(pf
); /* Pone el puntero al principio del fichero */ printf("Nombre del cliente a eliminar: "); LEE_CAD(nombre,TAM_NOMBRE);
fread(&cli
,sizeof(struct cliente
),1,pf
); while(strcmp(cli.
nombre, nombre
!= 0) && (!feof(pf
))){ fwrite(&cli
,sizeof(struct cliente
),1,aux
); fread(&cli
,sizeof(struct cliente
),1,pf
); }
if(strcmp(cli.
nombre, nombre
== 0){ fread(&cli
,sizeof(struct cliente
),1,pf
); fwrite(&cli
,sizeof(struct cliente
),1,aux
); fread(&cli
,sizeof(struct cliente
),1,pf
); }
perror("Error al cerrar el fichero auxiliar de baja cliente"); fallo = 1;
}
else{
fclose(pf
); /* Cierra el original */ remove("datos.dat"); /* Borra el original */ /* Renombra el auxiliar a fichero de datos */
rename("datos_aux.dat", "datos.dat"); }
}
else {
printf("\nCliente no encontrado\n"); fallo = 1;
}
return (fallo); /* Indica si el borrado ha sido correcto o no */
}
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.