Final de archivo (eof y feof) con C. End Of File. Leer datos de un fichero hasta final. Ejemplo código (CU00543F)

Resumen: Entrega nº43 del tutorial "Curso básico de programación en lenguaje C desde cero".
Codificación aprenderaprogramar.com: CU00543F

 

 

FIN DE ARCHIVO. EOF Y FEOF EN C

EOF (End Of File)es un parámetro booleano útil para facilitar el cierre de bucles de extracción de datos desde archivo. En C,EOF es una constante de tipo entero (normalmente  -1) que es el retorno que envían distintas funciones de extracción de información desde archivos al llegar a un final de archivo y no existir más datos. También se puede “simular” EOF mediante una entrada de teclado, normalmente CTRL+Z y enter ó CTRL+D y enter según el sistema operativo que empleemos.

logo lenguaje programacion C

 

Prueba este código, cuya ejecución debe concluir al pulsar CTRL-Z y enter ó CTRL-D y enter.

#include <stdio.h>

#include <stdlib.h>

int main() {

    int entrada=0; printf("Escribe un caracter: ");

    while ((scanf("%c%*c", &entrada)) != EOF) {

        printf("La entrada no ha sido EOF\n", EOF);

        printf("Escribe un caracter:\n");

    }

    return 0; // Ejemplo aprenderaprogramar.com

}

 

Pero el interés principal de EOF está en la extracción de datos desde archivos. Recordemos que para acceder a un fichero usábamos FILE* nombreInternoFichero; Si se trata de extraer mayor número de datos del que existen en un archivo aparecerá un error del tipo "La entrada de datos ha sobrepasado el final del archivo". Para evitarlo utilizaremos la función feof con esta sintaxis:

while (!feof(fichero))

 

Consideremos el archivo libros.dat donde teníamos 10 datos numéricos.

guardar datos en archivo visual basic

 

 

La extracción de datos usando feof se haría de la siguiente manera (para ello debemos crear el archivo libros.dat y ubicarlo en el directorio de trabajo):

#include <stdio.h>
#include <stdlib.h>
// Ejemplo aprenderaprogramar.com
int main() {
    int valorInt; FILE* fichero;
    fichero = fopen("libros.dat", "rt");
    while (!feof(fichero)) {
        fscanf (fichero, "%d", &valorInt);
        printf ("Extraido: %d \n", valorInt);
    }
    fclose(fichero);
    puts ("\n\nAlcanzado el final del fichero");
    return 0;
}

 

 

El resultado esperado es que se muestre: Extraido: 55 Extraido: 10 Extraido: -99 Extraido: 35 Extraido: 7 Extraido: -66 Extraido: 88 Extraido: 12 Extraido: -33 Extraido: -500 Alcanzado el final del fichero.

 

 

EJERCICIO Nº1: ENUNCIADO

Transformar en código el siguiente pseudocódigo y razonar para comprender su lógica. En un fichero tenemos las notas establecidas entre 0 y 10 de un grupo de alumnos de una clase. Cada nota está en una línea del fichero. Se desean extraer las notas en un array nota(1),    nota(2), …, nota(n) y en base al sumatorio de dicho array, determinar la nota media. Dado que no se conoce el número de alumnos a priori, deberá emplearse la señal Fin de archivo (EOF) para la extracción de datos.Considerar que el número de datos es igual o inferior a 50.

 

Pseudocódigo:

1.  Inicio [Media con Finarchivo aprenderaprogramar.com]

2.  Mientras Finarchivo = Falso Hacer

i = i + 1

Leer Nota(i)

Suma = Suma + Nota(i)

Repetir

3.  Media = Suma / i

4.  Mostrar “La nota media de la clase es”, Media

5.  Fin

 

 

EJERCICIO Nº1: SOLUCIÓN

Vamos a considerar que el archivo con los datos es notas.dat y que contiene los siguientes 35 valores:

6 – 7 – 8 – 5 – 6 – 4 – 7 – 8 – 7 – 10 – 0 – 5 – 6 – 7 – 6 – 5 – 0 – 7 – 8 – 10 – 2 – 3 – 4 – 5 – 6 – 7 – 6 – 5 – 4 – 10 – 4 – 3 – 2 – 3 – 4

En el fichero habrá un dato en cada línea. Aquí los hemos escrito separados por guiones por motivos de espacio. El código sería el siguiente:

#include <stdio.h>
#include <stdlib.h>
#define NUMELEMENTOS 50
// Ejercicios resueltos aprenderaprogramar.com
int main() {
    int i=0;
    double nota[NUMELEMENTOS];
    double suma=0.0;
    double media=0.0;
    FILE* fichero;
    fichero = fopen("notas.dat", "rt");
    while (!feof(fichero)) {
        fscanf (fichero, "%lf", &nota[i]);
        suma = suma + nota[i];
        i = i+1; //Valor final de i será 35
    }
    fclose(fichero);
    media = suma/i;
    printf ("La media es %lf", media);
    return 0;
}

 

 

EJERCICIO

En un archivo denominado miTexto.txt existen varias líneas de texto. Crear un programa que extraiga el contenido de las líneas hasta el final del archivo usando eof ó feof y las muestre por pantalla.

Ejemplo: si el contenido del archivo es el siguiente.

Cumpliendo con mi oficio

piedra con piedra, pluma a pluma,

pasa el invierno y deja

sitios abandonados.

 

El resultado de ejecución deberá ser el siguiente:

Linea 1 contiene: Cumpliendo con mi oficio

Linea 2 contiene: piedra con piedra, pluma a pluma,

Linea 3 contiene: pasa el invierno y deja

Linea 4 contiene: sitios abandonados.

 

Añade varias líneas más al archivo y comprueba que el programa las extrae todas.

Para comprobar si tus respuestas son correctas puedes consultar en los foros aprenderaprogramar.com.

 

 

 

 

 

 

Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link:  Ver curso completo.

Para  hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

¿Puedo yo aprender?

Seas o no del área informática, si quieres aprender a programar te ofrecemos una solución guiada y personalizada: realizar un curso tutorizado on-line. Con este tipo de curso, podrás aprender a programar de forma ágil y amena.

Acceder a detalles y precios de los cursos tutorizados on-line

Política sobre cookies

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, de acuerdo a tus hábitos de navegación.

Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra Política de Cookies.

En Facebook!

Ahora puedes seguirnos en Facebook. Noticias, novedades y mucho más ¡Te esperamos!

RANKING APR2+

Ranking de lenguajes y entornos de programación aprenderaprogramar.com
 

JULIO - AGOSTO 2017

1. Java / J2EE
2. Entornos Oracle
3. Entornos SQL Server
4. JavaScript, jQuery
5. .NET, C#
6. HTML, CSS
7. Android, iOS
8. Php, MySql


Acceder a detalles sobre el ranking de programación aprenderaprogramar.com

FOROS APR2+

Pregunta, responde, consulta, lee, intercambia...

Participa!!! Entra en los foros aprenderaprogramar.com.

             Copyright 2006-2017 aprenderaprogramar.com                La web abierta a cualquier persona interesada en la programación