中易网

c++中fscanf如何实现循环读取文件中的每一行

答案:6  悬赏:40  
解决时间 2021-01-11 13:38
  • 提问者网友:像風在裏
  • 2021-01-10 14:51
c++中fscanf如何实现循环读取文件中的每一行
最佳答案
  • 二级知识专家网友:轻熟杀无赦
  • 2021-01-10 15:56
可以使用fgets函数来实现。1 函数名:fgets2 声明形式:char *fgets(char *buf, int bufsize, FILE *stream);3 头文件:stdio.h4 功能及参数说明:从stream中读取一行数据存到buf中。如果数据长度小于bufsize,那么读入整行数据,并将换行符转换为字符串结束符\0。 如果数据长度超过bufsize,那么只读入bufsize大小的数据,并在结尾添加\0。5 返回值:成功,则返回第一个参数buf;在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。
全部回答
  • 1楼网友:刀戟声无边
  • 2021-01-10 20:29

不要学C++语言了,C++有以下几个缺点:


C++语言想解决的问题都不对路,都是一些皮毛问题,而没有涉及真正深层次的问题。
2.什么时候C++都不可能是正确的选择。
3.C++是狗屎,根本没啥设计,只是在C上面加了些渣滓而已。
4.面向对象解决的都是一些小问题。
  • 2楼网友:爱难随人意
  • 2021-01-10 19:37
用fgets不行吗~追问文件很大 用fgets和fscanf哪个效率高点 感觉fgets的效率会比较低 不知道是不是 求解追答1、fgets()用法
从流中读一行或指定个字符,
  原型是char *fgets(char *s, int n, FILE *stream);
  从流中读取n-1个字符,除非读完一行(换行\n),参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。
  形参注释:*s结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针。

2、fscanf的用法
  功 能: 从一个流中执行格式化输入
  用 法: int fscanf(FILE *stream, char *format,[argument...]);
  int fscanf(文件指针,格式字符串,输入列表);
  返回值:整型,数值等于[argument...]的个数

空格和多行处理:
(1)我们知道输入字符串格式用%s,字符用%c,当输出字符串中有空格时,(当然可以用fgets)如果这里我们用fscanf读取文本的话,则需要读入空格,我们可以用集合格式符%[^\n],"^"的意思是遇到^后面的字符则停止输入,这样就可以输入空格了。
(2)多行输入时,fscanf(fp,"%[^\n]",szbuff);文件指针在读到"\n"时停止,不能越过,所以后面的内容fp指不到;这时我们解决办法是:fscanf和fgetc连用解决。输入一条fscanf(fp,"%[^\n]",szbuff);后面紧跟一条fgetc(fp);指针即可越过"\n".追问
我同时使用了fscanf和fgets,当第一次使用了fscanf读了一个字段的内容之后,用fgets读取了一行的内容,之后再用fscanf读取内容时,有什么方法可以从第一次fscanf读完之后的位置开始
追答你是想逐个处理字符串,而不是每行?
同时还想知道这行字符串是否完成?
我看你一会记录定位到kitty,一会又说想要回去定位到18那里,,不知道你具体什么功能???
处理每行字符串???
  • 3楼网友:迟山
  • 2021-01-10 18:23
fgets,接收一个字符串
  • 4楼网友:山有枢
  • 2021-01-10 16:51
每次读取一行就可以了。每一行再使用fscanf解析
  • 5楼网友:山有枢
  • 2021-01-10 16:34
读一行可以用 fgets(), 比较简单。用 fscanf 也可以,下面例子 只读 1 行。
FILE *fp;
char s1[1024];
fp=fopen("a.txt","r");
if (fp==NULL) {perror ("Error opening file a.txt");return 0;};
fscanf(fp,"%[^\n]",s1);
printf("I read one line:\n%s\n",s1);
=============================
一个一个字符串读:
char s2[100][20];
int I,n=0;
while(1){
fscanf(fp,"%s",s2[n]);
if (feof(fp))break;
n++;
}
printf("I read each string as:\n");
for (i=0;i============================
单个字符控制,可以利用 c= getc(fp) 和 ungetc( c, fp); 功能。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息