<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>