2015-05-09 56 views
2

我是C編程和Ubuntu的新手。我被馬克·裏奇閱讀「C程序設計語言」,我發現下面的代碼:爲什麼我需要按兩次CTRL + D才能在Ubuntu 14.10中打開`while((c = getchar())!= EOF)`?

#include <stdio.h> 

int main() 
{ 
    int c; 
    int nc=0; 
    while((c = getchar()) != EOF) 
    { 
     nc++; 
    } 

    printf("%d Characters \n",nc); 

    return 0; 
} 

但在運行程序時,我輸入「你好」,然後CTRL + d兩次得到字符的實際數量是5

但是,當我輸入「你好」,然後CTRL + d一次,什麼都不會發生,終端仍等待輸入。

爲什麼?

+0

我認爲CTRL + D發送'EOF'如果沒有任何數據要刷新到'stdin'。 –

+0

http://stackoverflow.com/questions/29746522/why-is-some-code-from-kr-not-working-in-codeblocks/29746577#comment47630286_29746577 –

+0

@ CoolGuy我跟着上面的鏈接,發現了Veritas的評論有幫助。謝謝你的幫助。但是如果我在「Hello」之後按下「ENTER」,然後CTRL + D一次,字符數就會變成6.我認爲除了'你好'之外,還需要一個額外的字符「\ n」。不是嗎? –

回答

2

引用@Veritas's comment

在Linux上按Ctrl-d只能當緩衝區已爲空,否則它只是刷新它。因此,除非他在此之後按下輸入而沒有任何字符,否則他將不得不按Ctrl-D兩次。

這解釋了這個問題。您必須按兩次,因爲您在鍵入Hello後沒有按輸入以將輸入刷新到stdin。因此,您第一次按CTRL + D時,會將數據刷新到stdin。第二次按下時,發送EOF

相關問題