Foros del Web » Programación para mayores de 30 ;) » C/C++ »

borrar un registro

Estas en el tema de borrar un registro en el foro de C/C++ en Foros del Web. Hola, quiero eliminar un registro. 1º Defino en al main la variable: int baja. 2º Dentro del switch pongo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original ...
  #1 (permalink)  
Antiguo 04/06/2010, 13:42
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 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.
  #2 (permalink)  
Antiguo 04/06/2010, 19:13
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: borrar un registro

En la linea 19, cierra el parentesis justo despues de "nombre", para que la comparacion contra 0 sea hecha con el resultado de strcmp, y no sea hecho contra "nombre".

Agrega el prototipo de la funcion antes de usarla. O definela antes de usarla.

int baja(FILE *pf);

es el prototipo.

Lo que copiaste es la definicion.
  #3 (permalink)  
Antiguo 05/06/2010, 03:34
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: borrar un registro

No entiendo lo que quieres decir con lo del prototipo yo en el main he puesto int baja();
Y luego en el modulo he puesto int baja(FILE *pf). No entiendo lo que está mal.
  #4 (permalink)  
Antiguo 05/06/2010, 03:58
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: borrar un registro

No entiendo porque me da tantos fallos cuando lo compilo, he intentado borrar el subprogarma de la baja y cuando lo compilo los demás módulos que tengo me funcionan correctamente, pero cuando vuelvo a poner el modulo baja me da estos fallos y no lo entiendo:

ejercicio_de_examen.c: En la función ‘main’:
ejercicio_de_examen.c:99: error: expected ‘while’ before ‘void’
ejercicio_de_examen.c:125: error: declaración static de ‘ordenar_por_nombre’ después de una declaración que no es static
ejercicio_de_examen.c:29: error: la declaración previa de ‘ordenar_por_nombre’ estaba aquí
ejercicio_de_examen.c:179: error: declaración static de ‘compara’ después de una declaración que no es static
ejercicio_de_examen.c:127: error: la declaración previa de ‘compara’ estaba aquí
ejercicio_de_examen.c:183: error: declaración static de ‘ordenar_por_deuda’ después de una declaración que no es static
ejercicio_de_examen.c:30: error: la declaración previa de ‘ordenar_por_deuda’ estaba aquí
ejercicio_de_examen.c:236: error: declaración static de ‘comparar’ después de una declaración que no es static
ejercicio_de_examen.c:32: error: la declaración previa de ‘comparar’ estaba aquí
ejercicio_de_examen.c:241: error: declaración static de ‘incrementar_deuda’ después de una declaración que no es static
ejercicio_de_examen.c:26: error: la declaración previa de ‘incrementar_deuda’ estaba aquí
ejercicio_de_examen.c:280: error: declaración static de ‘decrementar_deuda’ después de una declaración que no es static
ejercicio_de_examen.c:27: error: la declaración previa de ‘decrementar_deuda’ estaba aquí
ejercicio_de_examen.c:319: error: declaración static de ‘mostrar_todo’ después de una declaración que no es static
ejercicio_de_examen.c:28: error: la declaración previa de ‘mostrar_todo’ estaba aquí
ejercicio_de_examen.c:330: error: declaración static de ‘baja’ después de una declaración que no es static
ejercicio_de_examen.c:33: error: la declaración previa de ‘baja’ estaba aquí
ejercicio_de_examen.c:371: error: expected declaration or statement at end of input
  #5 (permalink)  
Antiguo 05/06/2010, 05:36
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: borrar un registro

Necesito resolver este problema, porque el martes tengo examen.

Etiquetas: borrar, registro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:57.