题目

读文本文件,统计行数

思路

本题打开文本文件,统计其中有多少行(以 计)。

fopen 后以 fgetc 读字符,遇到 ''lines++;空文件为 0 行。用完 fclose

解题分析

fgets 按行读,行数++;最后一行无换行也算一行。fopen 失败要处理。大文件同样线性扫描即可。

函数简要说明

本题用标准 I/O 读文本文件。常用接口如下:

  • fopen(path, "r"):以只读文本方式打开文件;成功返回 FILE*,失败返回 NULL,要先判断再使用。
  • fgets(buf, size, fp):读一行(含换行符写入 buf,或读到 EOF);返回 buf 或 NULL。统计行数时每次成功读入一行就 lines++ 即可。
  • fgetc(fp):读一个字符;配合 feof(fp) 可逐字符扫描,见换行 '\n' 时行数加一(与 fgets 思路等价)。
  • fclose(fp):关闭文件,释放资源;打开成功后配对调用。

完整程序

#include <stdio.h>

int main(void)
{
    FILE *fp = fopen("input.txt", "r");
    if (!fp) {
        printf("open failed\n");
        return 1;
    }
    char buf[1024];
    int lines = 0;
    while (fgets(buf, sizeof buf, fp)) {
        lines++;
    }
    fclose(fp);
    printf("%d\n", lines);
    return 0;
}