<div class="gmail_quote">Hola, hice una consulta hará un par de semanas sobre un problema que tengo que no hay manera de solucionar y no he sido capaz.<div>tengo un fichero con la estructura palabras, que se conforma de dos palabras (en castellano e ingles) y dos contadores (uno de aciertos, y otro d fallos). quiero ir preguntando cada vez la traduccion, el usuario da su respuesta, y aumentar los contadores de aciertos y fallos dependiendo si acierta o falla. para esto, tengo que editar el fichero el apartado de los contadores, y es aqui donde no hay manera. </div>
<div><br></div><div>entiendo como funcionan las funciones fread, fwrite, y he utiliziado el truco de fseek( (-1)-sizeof(palabra), para colocarme delante la palabra que quiero editar, xo no hay manera, no me avanza las palabras, y no entiendo porque. porque yo he provado todo. con un contador i, y casi consigo la solucion, xo no ntiendo xk con este sistema no puedo llegar a la solucion.</div>
<div>pego a continuacion aqui el fichero.</div><div><br></div><div>Muchas gracias por adelantado</div><div><br></div><div><br></div><div><br></div><div><br></div><div><div>#include <stdio.h></div>
<div>#include <string.h></div><div><br></div><div><br></div><div>struct t_palabra { </div><div> char castellano[30];</div><div> char ingles[30];</div><div> int cont_aciertos;</div>
<div> int cont_errores;</div><div> };</div><div> </div><div> </div><div>int main (void)</div><div><br></div><div>{</div><div> FILE *fichero; </div><div> struct t_palabra palabra; </div>
<div> char respuesta[30]; </div><div> int i; </div><div> </div><div>struct t__virt_palabra { </div><div> char virt_castellano[30];</div><div>
char virt_ingles[30];</div><div> int virt_cont_aciertos;</div><div> int virt_cont_errores;</div><div> }; </div><div>struct t__virt_palabra virt_palabra; </div><div> </div><div> fichero = fopen ("datos.dat", "rb+"); </div>
<div> </div><div> </div><div> if (fichero == NULL) </div><div> printf ("Error: No se ha podido abrir el fichero datos.dat.");</div>
<div> </div><div> else</div><div> { </div><div> </div><div> strcpy (respuesta, "hola");</div><div> virt_palabra.virt_cont_aciertos = 0;</div><div> virt_palabra.virt_cont_errores = 0;</div>
<div> </div><div> fseek(fichero, 0*sizeof(struct t_palabra), SEEK_SET); </div><div> </div><div> while (feof(fichero)==0) </div><div> { </div>
<div> </div><div> fread(&palabra, sizeof(palabra), 1, fichero); </div><div> printf ("\nEscribe la traduccion de...: "); </div><div> printf ("\n%s: ", palabra.castellano);</div>
<div> gets(respuesta); </div><div> </div><div> </div><div> if (strcmp(respuesta, palabra.ingles) == 0) </div><div> {</div>
<div> printf ("\nCorrecto!"); </div><div> </div><div> </div><div> strcpy (virt_palabra.virt_castellano, palabra.castellano);</div>
<div> strcpy (virt_palabra.virt_ingles, palabra.ingles);</div><div> </div><div> virt_palabra.virt_cont_aciertos = palabra.cont_aciertos + 1;</div>
<div> </div><div> </div><div> fseek(fichero, (-1)*sizeof(struct t_palabra), SEEK_SET);</div><div> </div>
<div> strcpy (palabra.castellano, virt_palabra.virt_castellano);</div><div> strcpy (palabra.ingles, virt_palabra.virt_ingles);</div><div> palabra.cont_aciertos = virt_palabra.virt_cont_aciertos;</div>
<div> </div><div> </div><div> fwrite (&palabra, sizeof(palabra), 1, fichero);</div><div> </div>
<div> </div><div> } </div><div> else</div><div> {</div>
<div> </div><div> printf ("\nIncorrecto.");</div><div> </div><div> </div><div> virt_palabra.virt_cont_errores = palabra.cont_errores + 1; </div>
<div> strcpy (virt_palabra.virt_castellano, palabra.castellano);</div><div> strcpy (virt_palabra.virt_ingles, palabra.ingles);</div><div> </div>
<div> fseek(fichero, (-1)*sizeof(struct t_palabra), SEEK_SET);</div><div> </div><div> strcpy (palabra.castellano, virt_palabra.virt_castellano);</div>
<div> strcpy (palabra.ingles, virt_palabra.virt_ingles);</div><div> palabra.cont_errores = virt_palabra.virt_cont_errores;</div><div> </div>
<div> </div><div> fwrite (&palabra, sizeof(palabra), 1, fichero);</div><div> </div><div> </div>
<div> }</div><div> </div><div> </div><div> }</div><div> </div><div> </div><div> fclose (fichero);</div>
<div> </div><div> </div><div> }</div><div> </div><div> </div><div>fflush(stdin);</div><div>printf("\n\nPulse Intro para finalizar...");</div><div>getchar();</div><div><br></div><div><br>
</div>
<div> </div><div>}</div></div><div><br></div><div><br></div>
</div><br>