2012-07-07 91 views
0

我无法理解我的程序的行为。它调用scanf,然后是ungetc,然后是printf。需要帮助了解与scanf结合使用的ungetc行为

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

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

在gcc编译器和Linux平台输出: 首先,如果我给90然后等待另一个号码后,我给另一个号码它打印90

+0

它在哪一点等待另一个号码?你为什么使用ungetc? – 2012-07-07 14:07:32

+3

它与'ungetc'无关,它是扫描格式。删除'\ n'并立即打印。 – 2012-07-07 14:10:28

+0

我进入后第一个说90它等待另一个输入。当我输入另一个数字时,它打印90.i只是试验ungetc..just为学习目的 – Dhatri 2012-07-07 14:10:41

回答

2

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

1

扫描格式

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

消耗你输入号码后到来的所有空格。因此,只有在输入非空白字符(以及将输入发送到程序的换行符)后才能完成扫描。 \n不需要特别的换行符,它告诉scanf消耗所有跟随的空白并忽略它。