0

我无法理解我的程序的行为。它调用scanf,然后是ungetc,然后是printf。

我无法得到输出行为背后的原因。这是代码。如果有人澄清了这种行为,将会很有帮助。

int main()
{
  int n=0;
  scanf("%d",&n);
  ungetc(n,stdin);
  printf("%d\n",n);
  return 0;
}

gcc 编译器和 linux 平台中的输出: 首先如果我给 90,那么它会等待另一个数字,在我给另一个数字之后它会打印 90。

4

2 回答 2

2

以指示期望并吃掉它在您的号码后看到的所有空格来结束您的scanf()格式。它看起来像在等待另一个输入的原因是因为它会读取直到它得到一些非空白字符。您输入的任何内容都不会被实际读取,而是留给后续读取。\nscanf()stdin

于 2012-07-07T14:12:45.547 回答
1

扫描格式

scanf("%d\n",&n);

消耗您输入的数字之后的所有空格。因此,只有在您输入非空白字符(以及将输入发送到程序的换行符)后,扫描才会完成。不需要专门的\n换行符,它告诉scanf消耗所有后面的空格并忽略它。

于 2012-07-07T14:15:18.793 回答