题目

编写程序打开并读取一个指定的文本文件,统计该文本文件包含的总行数并在控制台输出。

输入格式:程序默认读取当前目录下的测试文件 test.txt(或从标准输入读入文件名)。

输出格式:输出一个整数表示统计到的文本行数,末尾换行。

数据范围与约定:文件大小不超过 10MB。

思路与算法

1. 文件指针与只读打开
使用 FILE *fp = fopen(filename, "r"); 打开文件,务必检查 fp == NULL 防御文件不存在或无权限打开。

2. 字符读取与换行符统计
使用 int ch = fgetc(fp); 逐字符读取直到 EOF。遇到换行符 '\n' 时计数器加 1。最后必须调用 fclose(fp) 释放文件描述符。

完整程序

#include <stdio.h>

int main(void)
{
    // "r" 模式只读打开文件
    FILE *fp = fopen("input.txt", "r");
    // 关键防御:打开文件失败时(如文件不存在或无权限)fp 为 NULL
    if (!fp) {
        printf("open failed\n");
        return 1;
    }

    char buf[1024];
    int lines = 0;
    // fgets 每次读取一行内容,读到文件末尾 (EOF) 时返回 NULL
    while (fgets(buf, sizeof buf, fp)) {
        lines++;
    }

    // 操作完毕后必须显式关闭文件句柄,释放系统资源
    fclose(fp);
    printf("%d\n", lines);
    return 0;
}