2011-03-23 130 views
1

我正在使用NetBeans MinGW編譯簡單的c程序(我是新手)。 我的問題是,我有這個簡單的代碼EOF閱讀C/C++

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char** argv) { 
    int c,i=0; 
    while((c=getchar())!=EOF){ 
     i++; 
    } 
    printf("%d",i); 
    return 0; 
} 

,當我嘗試這樣結束輸入:

你好^ Z [進入]

它不會做它,我需要重新輸入

^Z [enter]

以結束它。

我很感激你告訴我爲什麼會發生這種情況。

在此先感謝

+0

在'while'循環內打印'c',看看第一次點擊ctrl + z時會打印什麼。 – 2011-03-23 14:30:41

回答

2

C輸入默認是面向行的。用EOF字符結尾(在Windows上爲^Z,在Unix上爲^D)結束該行(沒有結尾的換行符),但實際上並不表示結束文件;當在下一次讀取時遇到文件狀態結束時,即在行的開始處。

+0

我不認爲這是一種特定語言,而是控制檯解釋用戶輸入的方式。 – CashCow 2011-03-23 14:23:05

+0

這適用於linux嗎?它適用於第一個ctrl + D(gnome-terminal)。 – 2011-03-23 14:27:47

+1

@John:如果你在一條線的中間,然後按'^ D',它會發送部分線,但不發送EOF。再按一次,它被當作EOF。 (這是'icanon'模式。) – geekosaur 2011-03-23 14:30:15

1

就用這種方式在控制檯輸入處理

按Ctrl-Z在UNIX系統上會中斷,讓你暫停過程中,所以我想這是一個Windows控制檯。

當你在字符後面用Ctrl-Z的時候,它可能會把它當作一個「End」,它是獨立的Ctrl-Z。

+0

是的。 Ctrl + D的Linux。 MinGW也意味着「Windows的極簡主義GNU」 – 2011-03-23 14:24:15