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>