[C con Clase] problemas con la posicion del puntero en un fichero, funciones fread, frwite, fseek etc.
Albert Montolio
albert.montolio en gmail.com
Jue Mar 8 09:48:51 CET 2012
muchas gracias por la ayuda
El 6 de marzo de 2012 22:46, Salvador Pozo <salvador en conclase.net> escribió:
> 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
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120308/d876e54d/attachment.html>
Más información sobre la lista de distribución Cconclase