需要帮助了解与scanf结合使用的ungetc行为

时间:2012-07-07 13:59:37

标签: c

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

我无法理解输出行为背后的原因。 这是代码。如果有人澄清了这种行为,那将是非常有用的。

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

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

2 个答案:

答案 0 :(得分:2)

结束scanf()格式,\n指示scanf()期待并吃掉您在号码后看到的所有空格。看起来它正在等待另一个输入的原因是因为它会读取直到它获得一些非空白字符。无论您输入的是什么,实际上都不会被读取,而是留在stdin上进行后续读取。

答案 1 :(得分:1)

扫描格式

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

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