[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