Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Beginner Web en 5 Octubre 2018, 07:57 am



Título: Archivos, traducir recorrido
Publicado por: Beginner Web en 5 Octubre 2018, 07:57 am
El otro dia llegue a entenderlo pero hoy me olvide, se me hace algo confuso ese signo de exclamacion  :huh:
Código
  1. while consulta(file archivo, int codigo)
  2. {
  3. ...
  4. bool existe=false;
  5. if(archivo==NULL){
  6. ...
  7. }
  8. else{
  9. while(!feof(archivo) && !existe){// En castellano como seria este recorrido? Mientras no sea final del archivo y ...?
  10. ...
  11. }
  12. }
  13. }
  14.  


Título: Re: Archivos, traducir recorrido
Publicado por: OmarHack en 5 Octubre 2018, 09:08 am
Te falta parte del código para saber que hace la variable bool existe. En el codigo fuente original esa variable se usaba para determinar si se había encontrado un carácter.

El signo ! significa NO.

En español esa linea dice:
Mientras NO esté marcado el final del archivo y a su vez NO exite un carácter en la posición,
haz lo siguiente.
{Contenido del bucle}

Esta condición hace que se ejecute lo que hay dentro del bucle while mientras NO se llegue al final del archivo y NO se encuentren más carácteres en el archivo.







Título: Re: Archivos, traducir recorrido
Publicado por: Beginner Web en 5 Octubre 2018, 09:21 am
Pero bool existe estaba inicializado en false, no seria NO(false)? me siento confudidisima  :huh:


Título: Re: Archivos, traducir recorrido
Publicado por: Beginner Web en 5 Octubre 2018, 09:36 am
Te paso todo el codigo mejor, de esta forma no lo entiendo
Código
  1. bool existe(parchivo alumnos, int codigo)
  2. {
  3. talumno a;
  4. bool existe=false;
  5. alumnos=fopen("alumnos.txt","rb");
  6. if(alumnos!=NULL){
  7. while(!feof(alumnos) && !existe){
  8. fread(&a,sizeof(a),1,alumnos);
  9. if(a.libreta==codigo){
  10. existe=true;
  11. }
  12. }
  13. }
  14. fclose(alumnos);
  15. return existe;
  16. }
Pero de esta forma si
Código
  1. bool existe(parchivo alumnos, int codigo)
  2. {
  3. talumno a;
  4. bool existe=false;
  5. alumnos=fopen("alumnos.txt","rb");
  6. if(alumnos!=NULL){
  7. while(!feof(alumnos) && existe==false){
  8. fread(&a,sizeof(a),1,alumnos);
  9. if(a.libreta==codigo){
  10. existe=true;
  11. }
  12. }
  13. }
  14. fclose(alumnos);
  15. return existe;
  16. }


Título: Re: Archivos, traducir recorrido
Publicado por: OmarHack en 5 Octubre 2018, 10:17 am
No entiendo que es lo que tu no entiendes.  :-\

 Bucle dice:
  while            (!                                feof                                   (alumnos)              &&                !           existe)
Mientras      No         se alcance el final del archivo           alumnos.txt      y a su vez      No      sea == a No


Ahí tenemos 2 condiciones. Y ambas deben cumplirse para que el bucle se detenga.
Estas condiciones en el bucle while dicen:
-Mientras no se lea todo el archivo hasta el final.
&&
-Mientras la variable exista no tenga el valor contrario a false.  
Se ejecutará el contenido del bucle.

Esta comparación es posible porque la propia funcion feof devuelve falso o verdadero.

Lo que dice ese condicional al final es que, se ejecute el bucle hasta que feof devuelva true y existe valga true. Es decir, que ambos devuelvan true.

El programa lo que hace es que mientras no se llegue al final del archivo, y no le cambies el valor a existe, se siga buscando en el archivo alumnos.txt



Título: Re: Archivos, traducir recorrido
Publicado por: Beginner Web en 5 Octubre 2018, 10:46 am
Emm si entiendo lo de !feof(archivo)  ahi en el codigo lo puse , no se porque me lo explicas una y otra vez , ahh con que era MIENTRAS NO LE CAMBIE EL VALOR A EXISTE, ahi estaba el chiste  ;-)


Título: Re: Archivos, traducir recorrido
Publicado por: Serapis en 5 Octubre 2018, 15:59 pm
Emm si entiendo lo de !feof(archivo)  ahi en el codigo lo puse , no se porque me lo explicas una y otra vez , ahh con que era MIENTRAS NO LE CAMBIE EL VALOR A EXISTE, ahi estaba el chiste  ;-)

Exacto... 'existe' es un bulenao, puesto ahí para poder salir del bucle en algún momento anterior al final... por ejemplo por que estás buscando un contenido específico... si lo encuentras marcas 'existe==true', y saldrá del bucle aunque no se haya alcanzado el final del fichero...