怎么用fscanf读入文件下一行

形如:fprintf(fp,"%d %d %d\n%d %d %d",a,b,c,d,e,f)把abcdef的值写入了文件中。
请问怎么用fscanf来读入这两行的数据?
上面所说的只是一个例子,实际我要处理的是70行的数据,格式与上述一致。
我曾试过用形如:
fscanf(fp,"%d %d %d\n%d %d %d",&q,&w,&v,&r,&t,&p);来处理。发现q=r=a;w=t=b;v=p=c;
就是他怎么读都是第一行的数据。
请高人指点!!!

如果文件中的数字只是用空格或者回车符作分隔,就做如下修改:

fscanf(fp,"%d %d %d\n%d %d %d",&q,&w,&v,&r,&t,&p);

改为

fscanf(fp,"%d%d%d%d%d%d",&q,&w,&v,&r,&t,&p);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-03-29
你没有把换行符跳过,应改为fprintf(fp,"%d %d %d\n%d %d %d%[*^\n]%*c",a,b,c,d,e,f)。 %[*^\n]表示把这一行从当前位置到行尾的字符全部读出并丢弃。%*c表示丢弃换行符,转到下一行
第2个回答  推荐于2018-03-30
1 原型
int fscanf(FILE *stream, const char* format, …)
功能: 从stream流中连续读取能够匹配format格式的字符到参数列表中对应的变量里。
参数: “stream”是FILE指针类型变量,它指向一个真实的流对象。
“format”是C字符串,由“空格”、“非空格”及“转换符”组成。具体格式为%[*][width][modifiers]type。见2.1与format参数相关的概念。
“…”是与“format”中“转换符”对应变量地址的列表,两地址间用逗号隔开。
返回值:成功时返回从流中读取成功的数据的个数。失败时返回-1(Debian Linux)。
头文件:<stdio.h>
2 使用fscanf()
与format参数相关的概念
fscanf()的format参数允许的格式为:“%[*][width][modifiers]type”。[]中的内容根据需要供选,可缺省,%type必须要有,不可省。
%:是format参数的起始符号,不可缺少。
3. fscanf()例子
fscanf()可以用于读取文件流中的数据。现设有一个文件内容如下,
Figure1:ffReadFile.dat文件
拥有3个数字行的最后一个数字决定拥有两个数字的行数。用fscanf()函数读取其内的内容以笔记到fscanf()函数的用法。
2.2.1 fscanf()对空格的处理
用fopen成功打开ffReadFile.dat文件后,单用以下语句读取文件的第一行内容:
[cpp] view plaincopyprint?
re = fscanf(pF, "%d%d%d", &oLine.p, &oLine.l, &oLine.x);
if( 3 == re){
//Print on stdout
printf("%d\t%d\t%d\n", oLine.p, oLine.l, oLine.x);
}
re = fscanf(pF, "%d%d%d", &oLine.p, &oLine.l, &oLine.x);
if( 3 == re){
//Print on stdout
printf("%d\t%d\t%d\n", oLine.p, oLine.l, oLine.x);
}

此时,可以正确的打印第一行内容到屏幕之上。fscanf()函数读取第一行三个数据的过程如下:
Figure2:fscanf()函数读取数据过程
文件指针最开始指向ffReadFile.dat的第一个字符(即1)处,然后fscanf()根据“format”中的第一个“转换符”读取文件中的内容直到不符合当前“转换符”能够转换的字符为止,如果不符合“转换符”的数据为空格或者tab则舍掉空格或者tab使文件指针指向下一个数据。然后fscanf()继续在文件中匹配下一个“转换符”的数据。直到为所有的“转换符”匹配完数据为止。

2.2.2 fscanf()对不符合“特定格式”数据的处理
当不符合“特定格式”所要求的数据且不为空格和tab时,fscanf()将匹配到符合“特定格式”的数据赋给地址后不再往下读。如现将ffReadFile.dat中的内容修改如下:

3 使用fscanf()注意的地方
确保检查返回值,以确定找到了期待的值。而使用%s 格式的时候,一定要小心缓冲区溢出本回答被网友采纳
相似回答