我想了解明天的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/

10-11 23:12
查看更多