C - 无法获取文本文件中的行数?还有其他方式获取吗?

标签 c file-io

我希望程序按函数计算文本文件中的行数。以前可以用,但是现在总是返回0。 我做错了什么?

#include <stdio.h>
int couLineF(FILE* fp){ //count lines in file
    int count = 0,ch;
    while((ch = fgetc(fp)) != EOF){
        if(ch == (int)"\n" ) count++;
    }
    rewind(fp);
    return count;
}

int main(){

     FILE *fp = fopen("book.txt","r");
    int lines;
        if(fp){
            lines = couLineF(fp);
            printf("number of lines is : %d",lines);

        }

        return 0;

}
<小时/>

另一个问题

还有其他方法可以获取文本文件中的行数吗?

最佳答案

您的问题在这里:

if(ch == (int)"\n" )

您正在将 "\n" 的地址(字符串文字)转换为 int 并将其与 ch 进行比较。这没有任何意义。

替换为

if(ch == '\n' )

修复它。这会检查 ch 是否为换行符。(使用单引号 (') 表示字符,使用双引号 (") 表示字符串)

<小时/> 其他问题有:

  • 如果 fopen 成功,则不使用 fclose 关闭文件。
  • 如果最后一行不以 \n 结尾,您的程序将不会计算最后一行。
  • 绝对没有理由使用 rewind(fp),因为您再也不会使用 FILE 指针。

关于C - 无法获取文本文件中的行数?还有其他方式获取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29537728/

相关文章:

R 将列转换为 NA 值 - 为什么?

file - Mac打开grep文件列表

file-io - 在C#控制台中打开%appdata%中的.exe文件

php - 在 PHP 中有多少个打开的文件?

C:与for循环交错?

c - 为以下代码分配了多少空间?

c - 在c中分配大型指针数组(9mb)

matlab - 大量包含对象的小 .mat 文件的高效磁盘访问

c - 为什么在守护进程时 fork() 两次?

c - 为 Windows x64 构建 openSSL