[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