Archivos, traducir recorrido

Iniciado por Beginner Web, 5 Octubre 2018, 07:57 AM

0 Miembros y 1 Visitante están viendo este tema.

Beginner Web

El otro dia llegue a entenderlo pero hoy me olvide, se me hace algo confuso ese signo de exclamacion  :huh:
Código (cpp) [Seleccionar]
while consulta(file archivo, int codigo)
{
...
bool existe=false;
if(archivo==NULL){
...
}
else{
while(!feof(archivo) && !existe){// En castellano como seria este recorrido? Mientras no sea final del archivo y ...?
...
}
}
}
7w7

OmarHack

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.





I like to test things.

Beginner Web

#2
Pero bool existe estaba inicializado en false, no seria NO(false)? me siento confudidisima  :huh:
7w7

Beginner Web

Te paso todo el codigo mejor, de esta forma no lo entiendo
Código (cpp) [Seleccionar]
bool existe(parchivo alumnos, int codigo)
{
talumno a;
bool existe=false;
alumnos=fopen("alumnos.txt","rb");
if(alumnos!=NULL){
while(!feof(alumnos) && !existe){
fread(&a,sizeof(a),1,alumnos);
if(a.libreta==codigo){
existe=true;
}
}
}
fclose(alumnos);
return existe;
}

Pero de esta forma si
Código (cpp) [Seleccionar]
bool existe(parchivo alumnos, int codigo)
{
talumno a;
bool existe=false;
alumnos=fopen("alumnos.txt","rb");
if(alumnos!=NULL){
while(!feof(alumnos) && existe==false){
fread(&a,sizeof(a),1,alumnos);
if(a.libreta==codigo){
existe=true;
}
}
}
fclose(alumnos);
return existe;
}
7w7

OmarHack

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

I like to test things.

Beginner Web

#5
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  ;-)
7w7

Serapis

Cita de: 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  ;-)

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