C++ 为什么scanf会跳过输入txt文件中的整数?

C++ 为什么scanf会跳过输入txt文件中的整数?,c++,scanf,C++,Scanf,我正在努力了解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

我正在努力了解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;
}
#包括
整数和()
{
INTR;
int x,y;
而((r=scanf(“%d,%d”,&x,&y)),((r>=0)和&(r<2)))
{
char ch;
scanf(“%c”和“ch”);
}
返回x+y;
}
int main()
{
int x;
x=总和();
返回0;
}
input.txt是:

as23,rt12,67cd!x1,2

当我在gdb中运行这个程序并在

返回x+y

x表示打印x=12,y表示打印y=67

为什么跳过23而不将其分配给x,为什么不将12分配给y?假设循环跳过不是整数的字符,例如input.txt中的“as”,即使input.txt为
12,rt12,67cd!x1,2

它仍然跳过分配给x的12。我迷路了

之所以会出现这种情况,是因为scanf()只接受与您提供的格式字符串完全匹配的输入。在本例中,格式字符串表示:我想要一个紧跟逗号的整数,然后紧跟另一个整数


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

您输入的
%d,%d
的第一个匹配项是
12,67
。调试所有对scanf的调用。非常感谢。这很有道理。我的老师没有真正解释这一点。我一直在自学python,这很容易。我大学的C++教授是个天才,但不是一个好老师。他把事情弄得很复杂,很少对问题给出简单准确的答案。我在麻省理工学院的网上介绍了python算法,甚至比我的社区大学教授更容易理解。对那些上过大学的人来说,我们有时都会遇到教授。随领土而来。我很感谢你的帮助。谢谢你。再次检查我的解释。我编辑它是因为我第一次做了一个错误的假设,所以新的答案更正确。这看起来确实像是一个不必要的复杂例子,旨在绊倒新手。