Ejercicio 02 — Lee frases.txt y cuenta cuantas lineas tiene
Dificultad: verde · Módulo 09 (Lectura y escritura de archivos)
Enunciado
Lee frases.txt y cuenta cuantas lineas tiene. Imprime el total.
Diagrama de flujo

Cómo se resuelve
Aquí solo lees, no escribes. La idea es abrir frases.txt, recorrerlo línea a línea y llevar la cuenta.
FILE *fp = fopen(ARCHIVO, "r")abre en modo"r"(read). Este modo no crea el archivo: si no existe,fopendevuelveNULL. Por eso la comprobaciónif (fp == NULL)no es opcional; además el mensaje sugiere ejecutar antesej01, que es quien crea el fichero.- El truco del recuento está en el bucle
while (fgets(linea, sizeof(linea), fp) != NULL) { contador++; }.fgetslee una línea por llamada y devuelveNULLal llegar al final del archivo, así que cada vuelta del bucle equivale exactamente a una línea leída. No necesitas ni mirar el contenido, solo contar las vueltas. fclose(fp)cierra el archivo cuando terminas.
Trampa típica: dar por hecho que el archivo existe y no comprobar el NULL. Si frases.txt no está, sin esa comprobación el programa peta al usar fp. La otra es olvidar fclose; al ser solo lectura no pierdes datos, pero es buena costumbre cerrar siempre lo que abres.
Para practicar — cópialo en Dev-C++
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
/*
Curso de C — Modulo 09: Lectura y escritura de archivos
Ejercicio 02 — PRACTICA (rellena los TODO)
Enunciado: Lee frases.txt y cuenta cuantas lineas tiene. Imprime el total.
Dificultad: verde
Compilar: gcc -std=c11 -Wall ej02_practica.c -o ej02 && ./ej02
*/
#include <stdio.h>
#define ARCHIVO "frases.txt"
#define MAX_LEN 256
int main(void) {
// TODO 1: Abre ARCHIVO en modo lectura ("r") y guarda en FILE *fp
// Si fp == NULL, imprime error y haz return 1
int contador = 0;
char linea[MAX_LEN];
// TODO 2: Bucle con fgets para leer linea a linea hasta EOF
// Por cada linea leida, incrementa 'contador'
// TODO 3: Cierra el archivo
// TODO 4: Imprime el resultado:
// "El archivo 'frases.txt' tiene X linea(s)."
return 0;
}Solución — cópiala y ejecútala
/*
Curso de C — Modulo 09: Lectura y escritura de archivos
Ejercicio 02 — MODELO (resuelto)
Enunciado: Lee frases.txt y cuenta cuantas lineas tiene. Imprime el total.
Dificultad: verde
Compilar: gcc -std=c11 -Wall ej02_modelo.c -o ej02 && ./ej02
*/
#include <stdio.h>
#define ARCHIVO "frases.txt"
#define MAX_LEN 256
int main(void) {
FILE *fp = fopen(ARCHIVO, "r");
if (fp == NULL) {
printf("Error: no se pudo abrir %s\n", ARCHIVO);
printf("Crea el archivo primero ejecutando ej01.\n");
return 1;
}
int contador = 0;
char linea[MAX_LEN];
// Cada vez que fgets lee algo, es una linea
while (fgets(linea, sizeof(linea), fp) != NULL) {
contador++;
}
fclose(fp);
printf("El archivo '%s' tiene %d linea(s).\n", ARCHIVO, contador);
return 0;
}Cómo usarlo
Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.