[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