为什么scanf在输入txt文件中跳过一个整数?

时间:2015-11-23 06:16:16

标签: c++ 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?该循环假设跳过不是整数的字符,例如&#34; as&#34;在input.txt中即使是12,rt12,67cd!x1,2

的input.txt

它仍在跳过12分配给x。我搞不清楚了。

1 个答案:

答案 0 :(得分:1)

这是因为scanf()只接受完全与您提供的格式字符串匹配的输入。在这种情况下,格式字符串说:我想要一个紧跟逗号的整数,然后紧跟另一个整数。

输入字符串中与您的第一个scanf()格式字符串匹配的第一件事是“12,67”,因此您的while循环将继续从输入流中获取字符,直到它遇到“12,67”然后第一个scanf()将成功完成(((r >= 0) && (r < 2))条件将终止while循环)。