2010-07-21 42 views
2

我在C中編寫了兩個程序來計算字符並打印值。如何在程序中輸入數據來計算輸入的字符數?

一個使用while循環和其他用途。編譯時不會報告錯誤,但不會打印任何內容。

下面是使用代碼:

#include <stdio.h> 

/* count characters and input using while */ 
main() 
{ 
    long nc; 

    nc = 0; 
    while (getchar() != EOF) 
     ++nc; 
    printf("%ld\n", nc); 
} 

下面是使用代碼:

#include <stdio.h> 

/* count characters and input using for */ 
main() 
{ 
    long nc; 

    for (nc = 0; getchar() != EOF; ++nc) 
     ; 
    printf("%ld\n", nc); 
} 

編譯和運行。

當我輸入input並按回車時,會打印一個空白換行符。當我在沒有輸入任何內容的情況下回車時,再次打印空白換行符。我認爲它至少應該打印爲零。

+2

換行符不是EOF。 – GManNickG 2010-07-21 21:46:55

+0

我知道換行符是什麼,我知道EOF是什麼(在我的機器上EOF = -1)。我曾經說過,當有什麼東西輸入到程序中時,只會出現一個換行符,程序不會像我想要的那樣打印字符數。 – MW2000 2010-07-21 21:49:47

+0

我不知道我跟着你。如果你沒有按Ctrl + D或Ctrl + Z,你還沒有完成執行你的程序。 – GManNickG 2010-07-21 21:52:54

回答

5

您需要終止輸入到您的程序(即觸發EOF測試)。

您可以在大多數Windows命令窗口的新行開始處使用Ctrl-D或Ctrl-Z在大多數unix終端上執行此操作。

或者你可以從一個文件重定向標準輸入,例如:

myprogram < test.txt 

此外,你應該給主要的返回類型;隱含int已被棄用。

int main(void) 
+0

謝謝查爾斯。當它是Ctrl-D時,我正在按Ctrl-Z。一切都在工作:)。 如果隱式int不推薦使用,我是否也應該返回0;? – MW2000 2010-07-21 22:04:37

+0

@ MW2000:如果你沒有一個主體,你會得到一個隱式的'return 0;',但是我個人認爲最好將其明確。 – 2010-07-21 22:08:14

1

您的程序只有在看到文件結尾(EOF)後纔會輸出。使用CTRL-D或使用CTRL-Z在Windows上生成此文件。

0

按下鍵盤上的Enter,將字符\n添加到您的輸入中。爲了和程序打印出你需要添加'文件結束'(EOF)字符的字符數。

爲了注入EOF符,您應該按在Windows在Unix中CTRL-DCTRL-Z

1

您在此等待EOF字符(文件結束)。這隻會發生在兩種情況:

  • 用戶按Ctrl + Break(似乎在Windows上工作,但我不會指望這一點)。

  • 用戶輸入一個EOF字符(例如,可以用Ctrl + Z完成)。

更好的方法是檢查換行符。

0

你知道換行符是一個正常字符,而不是EOF指示符嗎?在大多數流行的操作系統上,EOF可以是Ctrl-D或Ctrl-Z。

1

爲您的程序正常工作。在你按下後輸入鍵,你必須確保你終止了你的循環,這樣程序才能正常工作。這是通過從鍵盤上輸入ctrl + Z來完成的。這些是對應於EOF的鍵。

相關問題