[C con Clase] problemas con la posicion del puntero en un fichero, funciones fread, frwite, fseek etc.
Salvador Pozo
salvador en conclase.net
Mar Mar 6 22:46:35 CET 2012
El pasado 2012-03-06 21:08:55, Albert_Munich escribió:
A> A Salvador le queria preguntar como es que a el le ha funcionado. Has
A> utilizado mi codigo fuente?
Hola:
He utilizado tu programa, lo he hecho de nuevo ahora, y a mi me funciona correctamente. No entiendo lo que puede estar pasando.
Te paso "mi versión" del programa, espero que te ayude.
----8<------
#include <stdio.h>
#include <string.h>
struct t_palabra {
char castellano[30];
char ingles[30];
int cont_aciertos;
int cont_errores;
};
int main (void)
{
FILE *fichero;
struct t_palabra palabra;
char respuesta[30];
int i, nPalabras;
/* Crea un fichero con dos palabras, quitar los comentarios para que lo haga cada vez */
/*
fichero = fopen ("datos.dat", "wb+");
strcpy(palabra.castellano, "casa");
strcpy(palabra.ingles, "house");
palabra.cont_aciertos = palabra.cont_errores = 0;
fwrite(&palabra, sizeof(palabra), 1, fichero);
strcpy(palabra.castellano, "coche");
strcpy(palabra.ingles, "car");
fwrite(&palabra, sizeof(palabra), 1, fichero);
fclose(fichero);
*/
fichero = fopen ("datos.dat", "rb+");
if (fichero == NULL)
printf ("Error: No se ha podido abrir el fichero datos.dat.");
else {
i=0;
while(!feof(fichero))
{
fseek(fichero, i*sizeof(palabra), SEEK_SET);
if(fread(&palabra, sizeof(palabra), 1, fichero) > 0) {
printf ("\nEscribe la traduccion de...: ");
printf ("\n%s: ", palabra.castellano);
gets(respuesta);
if (!strcmp(respuesta, palabra.ingles)) {
printf ("\nCorrecto!");
palabra.cont_aciertos++;
} else {
printf ("\nIncorrecto.");
palabra.cont_errores++;
}
fseek(fichero, (-1)*sizeof(struct t_palabra), SEEK_CUR);
fwrite (&palabra, sizeof(palabra), 1, fichero);
i++;
}
}
fclose (fichero);
}
fflush(stdin);
printf("\n\nPulse Intro para finalizar...");
getchar();
/* Parte para ver el estado final del fichero, quitar comentarios para activar */
/*
fichero = fopen ("datos.dat", "rb+");
rewind(fichero);
while(!feof(fichero)) {
if(fread(&palabra, sizeof(palabra), 1, fichero)) {
printf("%s Ac: %d Er: %d\n", palabra.castellano, palabra.cont_aciertos, palabra.cont_errores);
}
}
fclose (fichero);
*/
return 0;
}
----8<------
Hasta pronto.
--
Salvador Pozo (Administrador)
mailto:salvador en conclase.net
Más información sobre la lista de distribución Cconclase