<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="gmail_quote"><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hola, tengo problemas con abrir archivos, variables booleanas y las condiciones de los whiles.<br></blockquote></div></div></div></div></blockquote><div>Tengo una estructura que se llama palabra, que contiene palabra en castellano, su traduccion, y quiero ponerle una etiqueta (animales, deportes etc,)</div>
<div>en un archivo (datos.dat) se guardaran las palabras, en otro archivo se guardaran las etiquetas (etiquetas.dat)</div><div>cuando el usuario introduce 1 palabra a guardar, quiero comprobar si la etiqueta que introduce ya existia o no, i si la palabra que introduce ya existia o no, mediante variables booleanas y whiles. He escrito el codigo fuente pero hay errores que nose encontrar, ya que el comportamiento es caotico, no me abre el archivo en la primera entrada de palabra. creo que por ahi esta el problema, xo nose resolverlo. Creo que mi codigo fuente deberia funcionar para todas las iteraciones excepto la primera, que nose porque no funciona. Me sale que no ha podido abrir el archivo etiquetas en la primera iteracion (logico, aun esta vacio), xo no entiendo xk no escribe nada despues. Alguien me podria ayudar? indicarme si voy por el buen camino, o esta muy mal, o donde puedo mejorarlo... estaría muy agradecido. </div>
<div><br></div><div><br></div><div><div>void introducir_entrada ()</div><div><br></div><div>{</div><div>     </div><div>printf("\n Ha elegido la opcion: Introducir entrada.\n");  </div><div><br></div><div>struct t_palabra {</div>
<div>       char castellano[80];</div><div>       char aleman[80];</div><div>       float cont_aciertos;</div><div>       float cont_errores;  </div><div>       float eff;</div><div>       char etiqueta[20];</div><div>       char tipo[20]; </div>
<div>       char fecha[20];   </div><div>       };</div><div>       </div><div>struct t_etiqueta {</div><div>       char cadetiqueta[20];  </div><div>       };</div><div>       </div><div>    FILE *fichero; // contiene todas las palabras</div>
<div>    FILE *fichero2; // contiene todas las etiquetas (solo 1 vez)</div><div>    struct t_palabra palabra_nueva;</div><div>    struct t_palabra palabra;</div><div>    struct t_etiqueta etiqueta;</div><div>    int n,i;</div>
<div>    bool encontrada; // indica si ha encontrado la palabra, entonces no la vuelve a escribir)</div><div>    time_t tiempo = time(0);</div><div>    struct tm *tlocal = localtime(&tiempo);</div><div>    char output[128];</div>
<div>    bool etiquetaencontrada; // indica si ha encontrado la etiqueta, entonces no la vuelve a escribir</div><div>    </div><div>    </div><div>// Primero mostrar etiquetas disponibles, para que el usuario decida si utiliza alguna o no</div>
<div>    </div><div>printf ("\n\nEtiquetas disponibles: ");</div><div>    </div><div>fichero2 = fopen ("etiquetas.dat", "rb+");</div><div>    </div><div>if (fichero2 == NULL)</div><div>{</div>
<div>printf ("Error: Aun no has introducido ninguna etiqueta en el fichero etiquetas.dat.");</div><div>}</div><div>else</div><div>    {</div><div>    fread(&etiqueta, sizeof(etiqueta), 1, fichero2);</div><div>
    while (feof(fichero2)==0)</div><div>          {</div><div>          printf ("\n%s", etiqueta.cadetiqueta);</div><div>          fread(&etiqueta, sizeof(etiqueta), 1, fichero2);</div><div>          }</div>
<div>                fclose (fichero2);</div><div>    }</div><div><br></div><div>// se han escrito todas las etiquetas previamente introducidas. en el primer caso no se escribe ninguna</div><div>// el usuario introduce su palabra, con su correspondiente etiqueta            </div>
<div>fflush(stdin);</div><div>printf ("\n\nCastellano: ");</div><div>gets (palabra_nueva.castellano);</div><div>fflush(stdin);</div><div>printf ("\n\nIngles: ");</div><div>gets (palabra_nueva.aleman);</div>
<div>printf ("\n\nTipo: ");</div><div>gets (palabra_nueva.tipo);</div><div>printf ("\n\nEtiqueta: ");</div><div>gets (palabra_nueva.etiqueta);</div><div>// una vez introducida la palabra, con su etiqueta, se busca la etiqueta en el fichero etiquetas, xa ver si ya existia o no           </div>
<div>            </div><div>            // encontrar etiqueta</div><div>            </div><div>fichero2 = fopen ("etiquetas.dat", "rb+");</div><div>etiquetaencontrada = false;</div><div>if (fichero2 == NULL)</div>
<div>{</div><div>printf ("Error: No se ha podido abrir el fichero etiquetas.dat.");</div><div>}</div><div>else</div><div>    {</div><div>    i=0;</div><div>    fseek(fichero2, 0*sizeof(etiqueta), SEEK_SET);</div>
<div>    etiquetaencontrada = false;</div><div>    while (etiquetaencontrada == false)           // se busca si ya existia la etiqueta, sino existia se introduce, sino, nada</div><div>    //while (!feof(fichero))</div><div>
            {</div><div>            fseek(fichero2, i*sizeof(etiqueta), SEEK_SET);</div><div>            fread(&etiqueta, sizeof(etiqueta), 1, fichero2);</div><div>            </div><div>                            if (strcmp(palabra_nueva.etiqueta, etiqueta.cadetiqueta)==0)</div>
<div>                            {</div><div>                            etiquetaencontrada == true;</div><div>                            }</div><div>                            else </div><div>                            {</div>
<div>                            //encontrada = false;</div><div>                            }</div><div>                             i++;</div><div>              </div><div>            }                            // una vez recorrido el etiquetas.dat, si la hemos encontrado, nada, sino la hemos encontrado, escribimos</div>
<div>                             if (etiquetaencontrada == false) </div><div>                             {</div><div>                             strcpy (etiqueta.cadetiqueta, palabra_nueva.etiqueta);</div><div>                             fwrite (&etiqueta, sizeof(etiqueta), 1, fichero2);     </div>
<div>                             }</div><div>                                                 </div><div>                             else</div><div>                             {</div><div>                             } </div>
<div>    fclose (fichero);    </div><div>    }</div><div>    </div><div><br></div><div>                                           </div><div>            //} INTRODUCIR PALABRA en el archivo dats.dat</div><div>            </div>
<div>fichero = fopen ("datos.dat", "ab+");</div><div>    </div><div>if (fichero == NULL)</div><div>{</div><div>printf ("Error: No se ha podido abrir el fichero datos.dat.");</div><div>}    </div>
<div>    </div><div>else</div><div>    </div><div>{</div><div>            </div><div>            palabra_nueva.cont_aciertos = 0;</div><div>            palabra_nueva.cont_errores = 0;</div><div>            palabra_nueva.eff = 0;</div>
<div>            </div><div>            strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);</div><div>            </div><div>            printf("\n\n\n%s\n",output);</div><div>                       </div>
<div>            strcpy (palabra_nueva.fecha, output);</div><div>            </div><div>            </div><div>            // COMPROBAR SI YA LA HABIAS ENTRADO</div><div>            i=0;</div><div>            fseek(fichero, 0*sizeof(palabra), SEEK_SET);</div>
<div>            encontrada = false;</div><div>            while (!feof(fichero))</div><div>            {</div><div>                  fseek(fichero, i*sizeof(palabra), SEEK_SET);</div><div>                  fread(&palabra, sizeof(palabra), 1, fichero);</div>
<div>                                  if (strcmp(palabra_nueva.castellano, palabra.castellano)==0)</div><div>                                  {</div><div>                                  encontrada = true;</div><div>                                  }</div>
<div>                                  else </div><div>                                  {</div><div>                                  //encontrada = false;</div><div>                                  }</div><div>                  i++;</div>
<div>            }</div><div>              </div><div><br></div><div><br></div><div>              if (encontrada==true) </div><div>                 {</div><div>                 printf ("\n\nYa la habias escrito ");</div>
<div>                 }</div><div>              else </div><div>                   {</div><div>                   fwrite (&palabra_nueva, sizeof(palabra_nueva), 1, fichero);</div><div>                   }</div><div>                                                        </div>
<div>}                                   </div><div><br></div><div>fclose (fichero); </div><div><br></div><div><br></div><div><br></div><div>fflush(stdin);</div><div>printf("\n\nPulse Intro para finalizar...");</div>
<div>getchar();</div><div><br></div><div>} </div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="gmail_quote"><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<span><font color="#888888"><br>
--<br>
Salvador Pozo (Administrador)<br>
mailto:<a href="mailto:salvador@conclase.net" target="_blank">salvador@conclase.net</a><br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">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>
</font></span></blockquote></div></div></div><br></div>
</blockquote></div><br>