Lectura anticipada

¿Realmente qué hace un lectura anticipada cuando se accede mediante un bucle para leer un archivo, en lenguaje C?
¿Es siempre necesaria o sólo cuando se lee son bucle
...
lectura;
while()
{
...
lectura;
}
1

1 Respuesta

13.975 pts. http://www.openbsd.org.mx/~santana/
Esa lectura anticipada, tal como la codificas, es la adecuada.
La razón es sencilla: hallar en el momento adecuado la prueba de EOF (fin de archivo). En C, si estás al final de un archivo, feof() no te lo detecta, a menos que *intentes leer* más allá del final del archivo. En ese momento feof() te dice: "Has llegado al final del archivo".
Por esa razón es necesario leer antes de un while(feof(pfArchivo)) por si acaso el archivo no tiene registros, y entonces, la lectura anticipada "detonaría" la señal EOF y sería detectada en el while.
Veamos un ejemplo:
Tenemos un archivo con un solo registro, pero el programa debe estar preparado para tratar archivos con n registros. El código sería el siguiente:
fread(&registro, sizeof(registro), 1, pfArchivo);
while(!feof(pfArchivo))
{
/*Aquí manipulas el registro a gusto*/
fread(&registro, sizeof(registro), 1, pfArchivo);
}
En la lectura antes del while el primer registro es leído y llegas al final del archivo. El feof() del while no detecta fin de archivo pues aún no intentas leer más allá. Luego viene el código donde utilizas ese registro y finalmente intentas leer otro registro. Dado que no existe otro, en ese momento se "activa" la señal de EOF, mismo que es detectado en el while y se termina el ciclo.
Sin duda, elegante respuesta. Muchos textos tocan el tema, muy de soslayo, sin profundizar en el asunto. Dicen que es conveniente pero...
He reflexionado antes de hacer la pregunta y tu opinión ha confirmado lo que pensaba sobre el asunto.
Pero debo valorar la respuesta como se merece.
Mi agradecimiento, y un saludo.
Ismael

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas