2014-02-21 75 views
-1
#include <stdio.h> 
#ifndef EOF 
#define EOF (-1) 
#endif 

int main(void) 
{ 
    int nb, nl, nt, c; 
    nb = 0; 
    nl = 0; 
    nt = 0; 
    while ((c = getchar()) != EOF){ 
     if (c == ' ') 
      ++nb; 
     else if (c == '\n') 
      ++nl; 
     else if (c == '\t') 
      ++nt; 
    } 
    printf("Input has %d blanks, %d tabs, and %d newlines\n", nb, nt, nl); 
    return 0; 
} 

爲什麼這段代碼不工作?EOF不能在while循環中爲getchar()在Ubuntu 11.10中工作

我在我的Ubuntu 11.10上編譯了這段代碼。如果我將EOF替換爲\n,則按預期工作,但不會與EOF一起工作。

+1

你是什麼意思*不使用EOF *? –

+1

縮進,請嗎? – hivert

+0

空白,製表符和換行符的數量不會隨着循環連續而停止如何停止它 – Mux

回答

0

你是什麼意思「它不工作」?

首先不要重新定義EOF ...

其次,按Ctrl+D退出你的應用程序。它適用於我:

[email protected]:~/tmp$ ./a.out 
a 
s 
f <Ctrl+D> 
Input has 0 blanks, 0 tabs, and 3 newlines 
+0

感謝此快捷方式正在工作。 – Mux

0

該代碼正常工作。

要獲得終端輸入上的EOF,您必須在行的開頭按下Ctrl-D(例如,

$ ./program
你好,世界!
按Ctrl-d

現在程序接收EOF並終止while循環。

+0

感謝快捷方式工作。 – Mux

1

EOF是在stdio.h頭文件中定義的宏。它是End-of-file的縮寫,標誌着不能從輸入流中讀取更多數據的情況。你不應該重新定義宏。對於任何字符ch,表達式ch == EOF總是計算爲false。在* nix系統上,通過按Ctrl + D鍵輸入此值。在Windows系統上,Ctrl+Z產生EOF

相關問題