[C con Clase] editar un fichero, pero solo una variable de una estructura. no añadir ni borrar ni leer toda la estructura en si.

Albert Montolio albert.montolio en gmail.com
Jue Ene 5 16:05:21 CET 2012


Hola, soy principiante en esto de programar, aunque hice en carrera, y
ahora que tengo tiempo libre quiero aprender profundatemente.
Llevo días intentando resolver un problema, y no hay manera.
Tengo un fichero creado, donde se almacena la estructura palabra, donde
dentro tiene 4 variables. Por tanto en el fichero voy escribiendo palabra
palabra, y se van guardando bien. Puedo añadir una tras otra, las puedo
consultar, etc. Lo que no puedo es: por ejemplo la palabra 3, que contiene
sus 4 variables, quiero cambiar una de sus 4 variables. Se puede hacer? es
que en ningun foro lo he encontrado, ni en paginas web d internet, ni en el
libro de programacion que tengo. Solo se puede añadir, leer, escribir. He
probado con el fwrite utilizando rb+, pero no me deja editar solo 1
variable, le digo de hacerlo, y m borra toda la palabra.
El objetivo del programa es crearme mi propia base de datos con palabras de
ingles y su traduccion, y luego preguntarme las traducciones y
responderlas, y ver si son correctas o no, en base a los datos que he
guardado. Esto lo se hacer, lo que no consigo es: cada vez que aciertas, o
fallas, almacenarlo en un contador. Aqui esta el problema. Cada vez, por
ejemplo, que practico la palabra hello, y pongo hola. quiero que la
variable contador de esa palabra se incremente en uno. pero las otras
variables seguiran conteniendo hello y hola.
me podrian ayudar porfavor? en resumen, editar una estructura pero solo 1
campo de la estructura, previamente guardada en 1 fichero.
aqui va lo que yo he intentado:

el archivo fichero contiene palabras que con otro programa he ido
introduciendo, por ejemplo

estructura 1:
castellano = hola
ingles = hello
tipo = nombre
cont.aciertos = 0 aqui esta l problema, quiero conseguir editarlo

codigo fuente:

#include <stdio.h>

struct t_palabra {
       char castellano[30];
       char ingles[30];
       char tipo[30];
       int cont_aciertos;
       int cont_errores;
       };


int main (void)

{
    FILE *fichero;
    struct t_palabra palabra;
    int i;

    i=0;

    fichero = fopen ("datos.dat", "rb+");

    if (fichero == NULL)
       printf ("Error: No se ha podido abrir el fichero datos.dat.");

    else

    {
            fseek(fichero, i*sizeof(struct t_palabra), SEEK_SET);
            printf ("pon el nombre de aciertos que quieras: ");
            scanf("\n\n%d", &palabra.cont_aciertos);

            fwrite (&palabra.cont_aciertos, sizeof(palabra.cont_aciertos),
1, fichero);
            fread (&palabra, sizeof(palabra), 1, fichero);
            printf ("\n%d", palabra.cont_aciertos);
            printf ("\n%s\t\t%s\t\t%s\t\t%d", palabra.castellano,
palabra.ingles, palabra.tipo, palabra.cont_aciertos);

            fclose (fichero);
    }

fflush(stdin);
printf("\n\nPulse Intro para finalizar...");
getchar();

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


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