如何在C语言中有效地读取文本文件(.txt)并计算其行数?
时间: 2025-01-04 18:38:31 浏览: 10
在C语言中,为了有效读取文本文件并计算行数,可以使用循环结合`fgets`函数逐行读取,并检查换行符`\n`来判断每行的结束。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h> // 引入malloc,用于动态分配内存
#define BUFFER_SIZE 1024 // 定义缓冲区大小
void countLines(char *filePath) {
FILE *file = fopen(filePath, "r"); // 打开文件,"r"表示读取模式
if (file == NULL) {
perror("Failed to open file");
exit(EXIT_FAILURE); // 文件打开失败,退出程序
}
size_t fileSize = fseeko(file, 0L, SEEK_END); // 获取文件长度
fseek(file, 0, SEEK_SET); // 移动指针到开头
char *lineBuffer = malloc((fileSize + 1) * sizeof(char)); // 动态分配内存存储整个文件
fgets(lineBuffer, fileSize + 1, file); // 一次性读取文件内容
size_t lineCount = 0;
bool isEOL = false;
for (size_t i = 0; i < fileSize; i++) {
if (lineBuffer[i] == '\n') { // 检查是否到达行尾
lineCount++;
isEOL = true; // 设置标记,以便后续处理不需要再看当前字符
} else if (!isEOL) {
// 如果不是行尾,继续读取下一个字符
}
}
fclose(file); // 关闭文件
free(lineBuffer); // 释放动态分配的内存
printf("The file has %zu lines.\n", lineCount);
}
int main() {
char filePath[] = "example.txt";
countLines(filePath);
return 0;
}
```
在这个例子中,我们首先读取整个文件内容到一个字符数组中,然后遍历该数组,每当遇到换行符`\n`就增加行计数。这种方法适用于小文件,如果文件非常大,则不建议一次加载所有数据到内存中。
阅读全文