elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Funcion FEOF
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Funcion FEOF  (Leído 1,835 veces)
SerCorC

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Funcion FEOF
« en: 8 Junio 2018, 08:06 am »

Muy buenas tardes, dias o noches,tengo tiempo que he intentado hacer uso de archivos dentro de mis programas y he llegado toparme con distintos problemas con la funcion feof.Mis problemas son relativamente sencillos y aunque encuentro como resolverlos no llego a encontrarle una manera logica.Mi principal problema es sobre el funcionamiento de la funcion feof y se centra en el hecho de donde se encuentra este caracter EOF.Tengo dos ejemplos a continuacion sobre el contenido de un archivo.
ARCHIVO 1.
Hola Mundo

ARCHIVO2.
Hola Mundo\n

Me gustaria recalcar que en el segundo archivo se cuenta con una secuencia de escape de nueva linea al final de la frase "Hola Mundo".Mi problema se presenta  cuando quiero determinar cuantas lineas existen en el archivo mediante un programa como el siguiente:

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  
  5. FILE *archivo;
  6. int linea=0;
  7. char carac;
  8.  
  9. archivo=fopen("archivo.txt","r");
  10. do{
  11. fscanf(archivo,"%c",&carac);
  12. if(carac== '\n')
  13. linea++;
  14.  
  15. }while(!feof(archivo));
  16.  
  17. printf("%d",linea);
  18. }
  19.  

Quiero recalcar que el anterior programa solo es para poner en muestra los resultados que me crean incertidumbre.Cuando yo ejecuto dicho programa con el archivo 1, es decir, con el archivo que no tiene salto de linea, el programa me arroja que el programa  tiene '0' lineas,esto me hace pensar que el caracter EOF fue encontrado en la misma linea donde se encuentra la frase, sin embargo cuando lo ejecuto en el segundo archivo , es decir, el archivo que contiene la frase con un salto de linea me arroja que existen '2' lineas , pero no encuentro la razon de por que es asi, comprendo que la primera linea es la de la frase posterior a eso existe un salto de linea y  por los resultados con el primer archivo me hace pensar que el caracter EOF deberia estar en la segunda linea pero aún asi el programa me esta considerando una segunda linea, ¿Por qué succede esto?.De manera mas grafica yo intento interpretar que los archivos se verian asi:

ARCHIVO 1
Hola Mundo 'EOF'

ARCHIVO 2
Hola Mundo
 'EOF'

Conforme a lo anterior no entiendo por que el programa lo toma como si el segundo archivo se viera de la siguiente manera:

ARCHIVO 2
Hola Mundo

'EOF'

De antemano les agradezco su tiempo , les agradeceria si me pudieran comentar cual es el error en mi forma de pensar y si me pudieran apoyar con un libro o un articulo donde hablen mas a fondo de detalles como estos.


« Última modificación: 8 Junio 2018, 08:07 am por SerCorC » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Funcion FEOF
« Respuesta #1 en: 8 Junio 2018, 09:31 am »

Los archivos, gracias a FILE, tienen una bandera para indicar que has llegado al final del archivo y se activa cuando vas a leer algo y el puntero del archivo va a sobrepasar el final de éste.
En tus ejemplos buscas el carácter \n y en el primer ejemplo no existe.
En el segundo ejemplo sí llegas al carácter de nueva línea, lo lees y aumentas el contador pero no has llegado al final del archivo, por tanto hay una nueva iteración. Cuando entras otra vez en el bucle el puntero del archivo avanza pero debe leer más allá del archivo y por eso activa la bandera de fin de archivo. Cómo es imposible ir más allá de un archivo el puntero regresa sobre el último byte y lo devuelve. Como el último byte es \n lo recibes otra vez y en consecuencia se incrementa la variable. Cómo ahora sí se ha activado la bandera de fin de archivi el while, junto con feof, detiene la ejecución.
Lo que se hace normalmente es leer el archivo y entrar en un while con feof, haces el trabajo y la última instrucción del cuerpo del while es leer del archivo. Así en la próxima iteración feof dará la condición correcta.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Construir mapa en fichero aleatorio sin el uso de feof
Programación C/C++
edugp 1 2,062 Último mensaje 1 Junio 2012, 21:25 pm
por Foxy Rider
Problema con bucle y funcion feof
Programación C/C++
Franquieli 2 3,541 Último mensaje 30 Julio 2012, 21:21 pm
por Franquieli
Como llamar a una funcion dentro de otra funcion. Una ayuda urgentemente porfavo
Programación C/C++
LobateZZZ 1 10,842 Último mensaje 14 Abril 2013, 03:07 am
por rir3760
feof y fscanf
Programación C/C++
fafafa01 3 2,984 Último mensaje 21 Mayo 2016, 08:27 am
por class_OpenGL
Problema con feof
Programación C/C++
kuni2006 2 1,890 Último mensaje 9 Agosto 2016, 21:08 pm
por class_OpenGL
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines