【发布时间】:2016-06-16 13:06:55
【问题描述】:
我正在从文件中读取信息。该文件由格式组成
5
3 4 5 6
5 6 a 8 9 2
3 9 42 51 32
67 53 43
5 6 7 8 9 2
第 1 行包含 N 个测试用例 接下来的 N 行将包含由空格分隔的整数。 现在我想要的输出是
18
Invalid Input
137
163
37
对于每个测试用例,输出由一个对应于加法的整数组成。 我已经给出了代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
int flag=0,total=0,r=0,n,i,value,x;
char filename[100],c;
scanf("%s",filename);
fp=fopen(filename,"r");
fscanf(fp,"%d",&n);
for(i=1;i<=n;i++)
{
total=0;
flag=0;
do
{
r=fscanf(fp,"%d%c",&value,&c);
if(r!=2)
{
printf("\nInvalid Input");
flag=1;
break;
}
else
total+=value;
}while(c!='\n');
if(flag!=1)
{
printf("\n%d",total);
}
}
}
但是由于我们在出错后无法使用 fscanf 读取,所以我无法读取整个输入。而且我得到了输出
18
Invalid Input
Invalid Input
Invalid Input
Invalid Input
那么我该怎么做才能获得所需的输出
【问题讨论】:
-
不匹配的字符会一直保留在输入流中,直到被读取。由于您只读取数字,因此您永远不会从输入流中删除它。您可以使用
getchar读取一个字符,然后重试see here。 -
我试过了,但我使用的是 fscanf 但不是 scanf。它不工作。请帮助我
-
您可以将 fscanf 与 %c 一起使用,如下面的答案所示,或者
fread(fp, dummy, 1)