Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - SerCorC

#1
Programación C/C++ / Funcion FEOF
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:


#include <stdio.h>

int main(){

FILE *archivo;
int linea=0;
char carac;

archivo=fopen("archivo.txt","r");
do{
fscanf(archivo,"%c",&carac);
if(carac== '\n')
linea++;

}while(!feof(archivo));

printf("%d",linea);
}


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.