2012-07-07 29 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消耗所有跟隨的空白並忽略它。