c语言读取行数的函数,c++读取行

用C语言读出文件行数

#include stdio.h

召陵ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

int hangshu(char file[])//输入工程目录下的文件名,或者其他目录下绝对路径名例如:c:\\1.txt;

{

char c;

int h=0;

FILE *fp;

fp=fopen(file,"r");

if(fp==NULL)

return -1;//表示文件打开错误

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

{

if(c=='\n')

h++;

else

{

c=fgetc(fp);//这是处理最后一行可能没有换行标志,但是确文件结束。

if(c==EOF)

{

h++;

break;

}

}

}

return h;

}

int main()

{

int hs=hangshu("c:\\1.txt");//这里说明你要打开的文件。这个是c盘根目录下文件

int hst=hangshu("1.txt");//工程目录下的文件。

printf("行数:%d\n",hs);

printf("行数:%d\n",hs);

}

如上是用c编写的,不是c++.

运行的时候可以把中文注释去掉。

完全可以运行的,我已经测试过了。

C语言怎么做到从文件中读取一行数据,然后改变这一行内容

1、用fgets函数可以读取文件中某行的数据,某列数据就必须一个一个读入每行的第几个字符,再存入到一个字符串当中。

2、例程:

#includestdio.h

#includestring.h

void main()

{

char a[100],b[100],c[100];

int i=3,j=4,k=0;    //第三行,第四列

FILE *fp = fopen("data.txt","r");

while(fgets(c,100,fp)){    //读入每行数据

i--;

if(i==0) strcpy(a,c);    //读到第三行数据

b[k++]=c[j-1];        //把每行的那列字符拷到b中

}

b[k]=0;

printf("第%d行数据:%s\n",i,a);

printf("第%d列数据:%s\n",j,b);

fclose(fp);

}

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

读取文件行数, 可以逐个字符读取文件,到文件尾,统计\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;

}

c语言问题(想要读取文件的行数)

代码中有两个问题:

(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)

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

#includestdio.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',如果是苹果系统这种做法就失效了。

C语言读取指定行数据

很遗憾,事实上计算机是不可能做到读取txt文件的第n行的时间复杂度为O(1)的。

因为txt文件是“顺序存储”,如图参考自《数据结构》

要读取第n行,必须找到第n-1行 = 则必须找到n-2行 … 必须找到第1行。所以读取第5000行的字符串,只能一行一行找,就好比人类看书,要看到第5000段( txt的第5000行 其实打印出来是第5000段)必须一段一段数,不然只能估计,就不准确了。

如果要以O(1)时间复杂度定位到第N“行”或第N个记录,必须用“索引存储”、“散列存储”等,如数据库文件会用这类存储。具体细节可以学《数据结构》、《数据库原理》等。

参考代码:

#include stdio.h 

//读取filename文件(路径)、第 whichLine+1 行文本。

char * ReadSpeacialLine(char *filename, int whichLine)

{

FILE *fp;       

int currentLine = 0; //当前读取的行

char strLine[1024]; //每行最大读取的字符数,可根据实际情况扩大

if ((fp = fopen(filename, "r")) == NULL) //判断文件是否存在及可读

{

printf("error!");

return NULL;

}

while (!feof(fp))

{

if (currentLine == whichLine)

{

fgets(strLine, 1024, fp);  //读取一行

//printf("%s", strLine); //输出

return strLine;

}

fgets(strLine, 1024, fp);  //读取一行,并定位到下一行

currentLine++;

}

fclose(fp);                     //关闭文件

return NULL;

}

int main() {

//注意 源代码里字符串写"\\",编译之后只是1个\,因为\是转义符号

char txtFile[] = "E:\\新建文本文档.txt";

int i = 11;

printf("第%d行\n%s", i+1

, ReadSpeacialLine(txtFile, i)); //ReadSpeacialLine返回的字符串里自带换行

getchar(); //防止结束闪退

return 0;

}


本文标题:c语言读取行数的函数,c++读取行
本文路径:http://pwwzsj.com/article/dsgoepo.html