题目
编写程序打开并读取一个指定的文本文件,统计该文本文件包含的总行数并在控制台输出。
输入格式:程序默认读取当前目录下的测试文件 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;
}