2012-08-26 38 views
3

我正在閱讀「The C Programming Language」,並正在通過CodeBlocks的所有練習。但是,儘管直接從書中複製,我仍然無法讓我的角色反對工作。代碼如下所示:來自「The C Programming Language」的字符計數器無法正常工作

#include <stdio.h> 

main(){ 
    long nc; 

    nc = 0; 

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

當我運行程序,它會打開一個窗口,我可以輸入,但是當我按下回車鍵所發生的一切是它跳過下一條線,我可以繼續打字,但我認爲它應該打印字符的數量。

任何想法發生了什麼問題?

回答

5

這條線:

while (getchar() != EOF) 

意味着它一直讀取直到輸入— 的端部,直到一行的末尾。 (EOF是一個特殊的常量,意思是「文件結尾」。)您需要結束輸入(可能使用Ctrl-D或Ctrl-Z)來查看輸入的字符總數。

2

輸入不是EOF。根據您的操作系統,Ctrl-D或Ctrl-Z應該在標準輸入上充當EOF。

+0

好的,這是有道理的。但Ctrl-D和Ctrl-Z都不起作用。他們分別輸入^ D和^ Z。還有什麼可以的,或者在某處找出它是什麼? – user1624005

+0

如果^ D和^ Z都不起作用,您應該指定您的操作系統。 –

+1

@ user1624005:您可能需要鍵入Ctrl-Z,然後按Enter鍵。 – ruakh

2

如果你想終止EOL(行尾),用 '\ n' 代替EOF:

#include <stdio.h> 

main(){ 
    long nc; 

    nc = 0; 

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

我碰到了這個問題,今晚太。最後發現在Linux上的Ctrl-D工作。使用cc創建源文件,然後啓動程序並輸入一個單詞,然後在完成輸入時按兩次Ctrl-D。程序反擊的號碼將打印在剛輸入的單詞後面,程序立即終止。就像這樣:enter image description here

相關問題