我想了解明天的scanf考试程序。我无法为我的生命解决这个问题。任何帮助,将不胜感激。
#include <stdio.h>
int sum()
{
int r;
int x,y;
while ((r = scanf("%d,%d",&x,&y)), ((r >= 0) && (r < 2)))
{
char ch;
scanf("%c",&ch);
}
return x+y;
}
int main()
{
int x;
x = sum();
return 0;
}
input.txt是:
as23,rt12,67cd!x1,2
当我在gdb中运行该程序并中断时
return x + y
x正在打印x = 12,而y正在打印y = 67。
为什么23被跳过而不分配给x,为什么12没有分配给y?该循环假设在input.txt中使用
12,rt12,67cd!x1,2
跳过非整数字符,例如input.txt中的“as”它仍然跳过分配给x的12。我迷路了。
最佳答案
发生这种情况是因为scanf()仅接受与您提供的格式字符串完全匹配的输入。在这种情况下,格式字符串说:我想要一个立即在其后跟一个逗号的整数,然后立即在其后跟着另一个整数。
输入字符串中与第一个scanf()格式字符串匹配的第一件事是“12,67”,因此您的while循环将继续吞噬输入流中的字符,直到遇到“12,67”,然后遇到第一个scanf ()将成功完成(并且((r >= 0) && (r < 2))
条件将终止while循环)。
关于c++ - 为什么scanf跳过输入txt文件中的整数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33864729/