我正在努力了解明天扫描的扫描程序。我不能为我的生活搞清楚这一点。任何帮助将不胜感激。
#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?该循环假设跳过不是整数的字符,例如&#34; as&#34;在input.txt中即使是12,rt12,67cd!x1,2
它仍在跳过12分配给x。我搞不清楚了。
答案 0 :(得分:1)
这是因为scanf()只接受完全与您提供的格式字符串匹配的输入。在这种情况下,格式字符串说:我想要一个紧跟逗号的整数,然后紧跟另一个整数。
输入字符串中与您的第一个scanf()格式字符串匹配的第一件事是“12,67”,因此您的while循环将继续从输入流中获取字符,直到它遇到“12,67”然后第一个scanf()将成功完成(((r >= 0) && (r < 2))
条件将终止while循环)。