用c语言怎么读取txt文件中的行数

Python010

用c语言怎么读取txt文件中的行数,第1张

读取文件行数, 可以逐个字符读取文件,到文件尾,统计\n的个数

参考代码如下

#include <stdio.h>

int main()

{

    int c

    FILE *fp

    int lines=0

    fp=fopen("in.txt", "rb")

    if(fp)

    {

        while((c=fgetc(fp)) != EOF)

            if(c=='\n') lines++

        printf("%d\n",lines)

        fclose(fp)

    }

    return 0

}

也可以通过fgets函数,每次读取一行,到文件尾,然后计算读取的次数

#include <stdio.h>

#include <string.h>

int main()

{

    char s[100]

    FILE *fp

    int lines=0

    fp=fopen("in.txt", "r")

    if(fp)

    {

        while((fgets(s,100,fp)) != NULL)

            if(s[strlen(s)-1]=='\n') lines++

        printf("%d\n",lines)

        fclose(fp)

    }

    return 0

}

#include<stdio.h>int main(){char temp[255] int i=0 FILE *fp=NULL if((fp=fopen("file.txt","r"))==NULL) { printf("打开失败!\n") return 1 } while(fscanf(fp,"%s",temp)) i++printf("文件行数为:%d\n",i)return 0}

代码中有两个问题:

(1)while(){}语法问题。

while(条件)/////这后面不能加分号,加分号后将做空循环,循环里不会执行循环体的代码

{

循环体

}

把while()后面的分号""去掉就好。

(2)while里面的条件(c=fgetc(fp) !=EOF) 有问题。按照C语言运算符的优先级将按以下顺序执行这个while循环里面的语句:

1) 读取文件: fgetc(fp)

2) 将读取文件的结果与EOF比较: fgetc(fp) !=EOF

3) 将比较的结果赋值给c,就是说c每次得到的不是true(1)就是false(0),根本不是你想要的结果

这个表达式其实是:while (c = (fgetc(fp) != EOF) )

正确的写法是:while ( (c = fgetc(fp)) != EOF)

所以最后的代码修改如下:

#include<stdio.h>

main()

{

FILE *fp

char name[100],c

int i

int count = 0//计算文件中字符个数,从而判断是否为空文件

i=0//这边为什么初始化为1?如果输入的是空文件那么应该就是0行

printf("enter filename:")

gets(name)

fp=fopen( name ,"r")

if (fp != NULL)

while ((c=fgetc(fp)) != EOF )

{

count ++

if(c == '\n')

i++

}

if(i == 0 &&count >0) i ++//如果没有'\n'但是文件非空,那么该文件只有一行

printf("number of numbers:%d\n",i)

}

当然,仅仅判断'\n'并不保险,并不是所有系统下面的换行都有'\n',比如dos系统是"\r\n", linux系统一般用'\n',苹果系统用的是'\r',如果是苹果系统这种做法就失效了。