[C con Clase] Problemas de escritura en archivo.

Javier Cancio del Busto sepholin en gmail.com
Mar Mayo 27 21:06:02 CEST 2008


Buenas! Estoy intentando hacer un programa para ver el funcionamiento del
tratamiento de ficheros. La aplicación en cuestión pide 3 usuarios con sus
respesctivos años, y después lee el fichero y comprueba si uno de los
usuarios se llama "Javi", si es asi cambia su edad a 99 y lo actualiza. Y
luego recorre el fichero y si existe el usuario "Javi" muestra su edad
actualizada (99).

El problema es que no actualiza la edad correctamente, y al mostrar la
supuesta edad actualizada, muestra la que introduje por teclado.


Muchas gracias! Aqui el codigo:



 typedef struct {
  int edad;
  char nombre[20];
 } t_ficha;

int main(){

    t_ficha persona;
    FILE *prueba;
    int i, encontrado=0;

    if((prueba=fopen("prueba.dat", "wt"))==NULL)
       printf("\nError al abrir el archivo");

       /** Introducir los datos en el archivo. */
       for(i=0; i<3; i++){
          printf("\nDame el nombre: ");
          gets(persona.nombre);
          fflush(stdin);
          printf("\nDame la edad: ");
          scanf("%d", &persona.edad);
          fflush(stdin);
          fwrite(&persona, sizeof(persona), 1, prueba);
       }
       fclose(prueba);

       /* Actualizacion de los datos */
       if((prueba=fopen("prueba.dat", "rt+"))==NULL)
       printf("\nError al abrir el archivo");


       while(!encontrado && fread(&persona, sizeof(persona), 1, prueba)){
              if(strcmp(persona.nombre, "Javi")==0){
                 persona.edad=99;
                 encontrado=1;
                 fwrite(&persona, sizeof(persona), 1,
prueba);
          }
       }
       fclose(prueba);

       encontrado=0;

       /* Lectura de los nuevos datos */

       if((prueba=fopen("prueba.dat", "rt"))==NULL)
       printf("\nError al abrir el archivo");

       while(!encontrado && fread(&persona, sizeof(persona), 1, prueba)){
       if(strcmp(persona.nombre, "Javi")==0){
          encontrado=1;
          printf("\nLa nueva edad es: %d", persona.edad);
          }
       }

       fclose(prueba);

       return 0;
}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080527/bc25e527/attachment.html>


Más información sobre la lista de distribución Cconclase