Agradecer a Oscar Alberto y a Salvador la ayuda.<div>Oscar Alberto tu programa funciona genial, justo lo que queria, los contadores sirven simplemente para saber que palabras cuesta memorizar, palabra k aprendes pues la introduces, y el programa te las va preguntando. Lo que  justo acabo de empezar a programar, y no entiendo muy bien algunas cosas k utilizas, creo que utilizas C++, no ntiendo cosas cmo cout<<, using namespace std; etc, xo wno, ya llegara.</div>
<div>A Salvador le queria preguntar como es que a el le ha funcionado. Has utilizado mi codigo fuente? porque el problema que dices tu, que quizas mi fichero datos.dat esta corrompido, no es, xk cada vez lo borro y lo vuelvo a crear. Y escribo nuevas palabras. Te escribo el codigo fuente d como escribo las palabras x si alli estuviese mi error, xo no creo. Entonces, has utilizado mi codigo fuente y te ha funcionado, o has modificado un poco? si eres tan amable de indicarme el error, o simplemente mandarme el tuyo para comparar te lo agradeceria. a mi me sigue leyendo la segunda y repitiendo la ultima (en mi codigo, el codigo de Oscar Alberto funciona perfectamente, xo quiero reparar el mio para aprender poco a poco)<br>
<br>Muchas gracias a todos y pongo los dos codigos a continuacion, el de escribir la palabra y el de ejercitarla.</div><div><br></div><div>ESCRIBIR PALABRA</div><div><br></div><div><div>#include <stdio.h></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>       //float efectividad;     </div>
<div>       };</div><div>       </div><div><br></div><div>       </div><div>int main (void)</div><div><br></div><div>{</div><div>    FILE *fichero;</div><div>    struct t_palabra palabra;</div><div>    int n;</div><div>    </div>
<div>    fichero = fopen ("datos.dat", "ab+");</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>            //fseek(fichero, sizeof(struct t_ficha), SEEK_SET);  </div><div>            printf ("\n\nCastellano: ");</div><div>            gets (palabra.castellano);</div>
<div>            printf ("\n\nIngles: ");</div><div>            gets (palabra.ingles);</div><div>            //printf ("\n\nTipo: ");</div><div>            //gets (palabra.tipo);</div><div>            palabra.cont_aciertos = 0;</div>
<div>            palabra.cont_errores = 0;</div><div>            //palabra.efectividad = 0.0;</div><div>            //printf ("\n\nContador aciertos: ");</div><div>            //scanf("\n\n%d", &palabra.cont_aciertos);</div>
<div>            //printf ("\n\nContador errores: ");</div><div>            //scanf("\n\n%d", &palabra.cont_errores);</div><div>            //printf ("\n\nEfectividad: ");</div><div>            //scanf("\n\n%f", &palabra.efectividad);</div>
<div>            //palabra.cont_aciertos=0;</div><div>            //palabra.cont_errores=0;</div><div>            </div><div>            </div><div>            fwrite (&palabra, sizeof(palabra), 1, fichero);</div><div>
            // el cursor, se queda despues de la ultima palabra, para volver a escribir detras.</div><div>        </div><div>            fclose (fichero);</div><div>    }</div><div><br></div><div>fflush(stdin);</div><div>
printf("\n\nPulse Intro para finalizar...");</div><div>getchar();</div><div>            </div><div>}</div></div><div><br></div><div><br></div><div><br></div><div>EJERCITAR PALABRA -------------------------------------------------------------------------------------------------</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 {                      // t_palabra es una estructura que contiene castellano ingles y contadores de aciertos y fallos</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;                       // apunta al fichero donde se guardaran las palabras y sus aciertos/fallos</div><div>    struct t_palabra palabra;            // definim la variable paraula.</div>
<div>    char respuesta[50];                  // l'usuari entra la seva resposta</div><div>    int i;                               // recorrer el ficher</div><div>    </div><div>struct t__virt_palabra {                    // l'utilitzo per augmentar els contadors cada cop k l'usuari practica 1 paraula. (nose una altre manera de fer-ho)</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;        // definim la variable virt_palabra</div>
<div>    </div><div>    fichero = fopen ("datos.dat", "rb+");              // s'obre el ficher datos.dat. rb+ es correcte????? al ficher hi ha tant caracters</div><div>                                                       // castellano, ingles, com enters (els contadors) x tant te que ser binari, no?</div>
<div>    </div><div>    if (fichero == NULL)                                 // salta en cas que no existeixi l ficher datos.dat</div><div>       printf ("Error: No se ha podido abrir el fichero datos.dat.");</div>
<div>    </div><div>    else</div><div>    {   </div><div>        i=0;</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, i*sizeof(struct t_palabra), SEEK_SET); // se pone el cursor al inicio de todo xk i=0</div><div>        </div><div>        while (!feof(fichero))                        // preguntar al usuari paraules, fins k sarrivi a la ultima paraula, </div>
<div>        {                                                     // despres d'aquesta tindria que parar!!!!! i no ho fa :s, tornar a preguntar </div><div>                                                              // sempre la ultima :(</div>
<div>            if(fread(&palabra, sizeof(palabra), 1, fichero)) {</div><div>                               </div><div>            //fread(&palabra, sizeof(palabra), 1, fichero);     // en la primera iteracio, llegirm la primera paraula gracies a i=0</div>
<div>            printf ("\nEscribe la traduccion de...: ");       // preguntem la paraula</div><div>            printf ("\n%s: ", palabra.castellano);</div><div>            gets(respuesta);                                  // l'usuari entra la paraula</div>
<div>            </div><div>            // analitzar si l'usuari la encertat, o fallat, i incrementar els contadors corresponents x cada paraula</div><div>                            if (strcmp(respuesta, palabra.ingles) == 0)  // compara resposta amb palabra.ingles si es correcte...</div>
<div>                            {</div><div>                            printf ("\nCorrecto!");           // felicitem al usuari x cortesia, tenim que incrementar el contador d'encerts</div><div>                            </div>
<div>                                   // com que no es pot modificar nomes 1 apartat de la estructura paraula, tenim que introduir de nou tot...</div><div>                                   // copiem a la variable virtual (nomes serveix x traspar informacio) la paraula i la seva traduccio</div>
<div>                                   strcpy (virt_palabra.virt_castellano, palabra.castellano);</div><div>                                   strcpy (virt_palabra.virt_ingles, palabra.ingles);</div><div>                                   // incrementem el contador una unitat</div>
<div>                                   //palabra.cont_aciertos a la primera iteració val 0 (aixi sa inicialitzat)</div><div>                                   // i ho guardem a la virtual tb, x tal d copiar tot again.</div>
<div>                                   virt_palabra.virt_cont_aciertos = palabra.cont_aciertos + 1;</div><div>                                   </div><div>                                   // important: com que hem utilitzat fread, el curso esta darrera la paraula llegida ara!!</div>
<div>                                   // la variable virtual conte les noves dades, es a dir, amb el contador incrementat,</div><div>                                   // x tant, tenim que ficar el cursor al inici de la paraula k estavem treballant, xk </div>
<div>                                   // escrigui la informacio just a sobre de la paraula antiga</div><div>                                   // ara la i estava a la posicio dspres de size of (equivalent a i=0), es a dir, dspres de la primera paraula</div>
<div>                                   // en la primera iteració, ja que la i val 0, amb aquesta comanda tornem a la posicio inical</div><div>                                   </div><div>                                   fseek(fichero, i*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>                                   // i podem sobreescriure la paraula que voliem</div>
<div>                                   </div><div>                                   fwrite (&palabra, sizeof(palabra), 1, fichero);</div><div>                                   // important, el cursor torna a estar darrera de la primera paraula (en primera iteracio)</div>
<div>                                                                                         </div><div>                            }      // sino es correcte...</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; // mateixa estrategia</div><div>                                   strcpy (virt_palabra.virt_castellano, palabra.castellano);</div>
<div>                                   strcpy (virt_palabra.virt_ingles, palabra.ingles);</div><div>                                   </div><div>                                   fseek(fichero, i*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>                                    </div>
<div>                                   fwrite (&palabra, sizeof(palabra), 1, fichero);</div><div>                                   // important, ara el cursor esta despres de la paraula treballada</div><div>                                   </div>
<div>                                }</div><div>                                    </div><div>            // hem acabat la primera iteracio</div><div>            </div><div>            </div><div>            i++; // incrementem la i, per tal danar a la propera paraula.</div>
<div>            fseek(fichero, i*sizeof(struct t_palabra), SEEK_SET);   // coloquem el cursor a la seguent posicio, es a dir, a la posicio 1, </div><div>                                                                    // es a dir, a la segona paraula. nem cap a dalt, ja que al ficher</div>
<div>                                                                    // encara hi ha paraules, i tooorneeem a fer el while.</div><div>            }</div><div>            else {</div><div>                 printf ("\nfin!");</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>
<br><div class="gmail_quote">El 6 de marzo de 2012 09:50, Salvador Pozo <span dir="ltr"><<a href="mailto:salvador@conclase.net">salvador@conclase.net</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
El pasado 2012-03-05 22:46:02, Albert_Munich escribió:<br>
<br>
A> Hola Salvador, he aplicado el cambio que me has dicho, y sigue pasando lo<br>
A> mismo, no lee la primera palabra, lee la segunda, y la ultima palabra la<br>
A> escribe dos veces :S<br>
<br>
Hola:<br>
<br>
He ejecutado tu programa y funciona perfectamente. Es posible que el fichero de datos se haya corrompido por la ejecución de versiones anteriores, a mi me pasó eso.<br>
<br>
Ya me contarás, hasta pronto.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
--<br>
Salvador Pozo (Administrador)<br>
mailto:<a href="mailto:salvador@conclase.net">salvador@conclase.net</a><br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div><br></div>