我正在编写一个读取给定行中行数的函数。某些文本文件可能不会以换行符结尾。
int line_count(const char *filename)
{
int ch = 0;
int count = 0;
FILE *fileHandle;
if ((fileHandle = fopen(filename, "r")) == NULL) {
return -1;
}
do {
ch = fgetc(fileHandle);
if ( ch == '\n')
count++;
} while (ch != EOF);
fclose(fileHandle);
return count;
}
现在该功能没有正确计算行数,但我无法确定问题所在。我非常感谢你的帮助。
答案 0 :(得分:4)
这是另一个选项(除了在EOF之前跟踪最后一个字符)。
int ch;
int charsOnCurrentLine = 0;
while ((ch = fgetc(fileHandle)) != EOF) {
if (ch == '\n') {
count++;
charsOnCurrentLine = 0;
} else {
charsOnCurrentLine++;
}
}
if (charsOnCurrentLine > 0) {
count++;
}
答案 1 :(得分:2)
fgets()
读取到换行符或缓冲区已满
char buf[200];
while(fgets(buf,sizeof(buf) != NULL)
{
count++;
}
此处 fgetc()
是一个问题,因为您首先遇到EOF
并退出do while
循环并且永远不会遇到\n
个字符,因此您的最后一行的计数仍然保持不变如果恰好是您的文件中有一行count
将是0