2016-08-22 39 views
-3

我使用Dev-C++ 5.11在我的Windows XP PC中創建了一個C程序。這是我看到了作爲一個典型的字符計數程序中的一個,它去如下:字符計數程序不工作,因爲它應該

#include <stdio.h> 

main() { 
    long nc; 
    nc = 0; 
    while (getchar() != EOF) { 
     ++nc; 
    } 
    printf("%ld", nc); 
} 

它編譯沒有問題,但它的作品,因爲它應該的人物中,只有當我按我包括回車鍵(\n) 。如果我不打印它或者打印0或者什麼也不打印。我嘗試過包含其他字符,如製表符或退格鍵,但什麼也沒有。我正在使用Ctrl + C來終止它。我究竟做錯了什麼?

+2

[while((c = getchar())!= EOF)不可能重複](http://stackoverflow.com/questions/18565663/while-c-getchar-eof-not-terminating ) –

+1

也許它不工作,「它應該」,但它的工作原理,因爲你正在使用getchar()函數,它等待「輸入按鈕」 –

+0

@DarkoDjuric:'getchar()'不等待「輸入」,它等待輸入實際出現在'stdin'處。兩者是完全不同的東西。 – DevSolar

回答

0

緩衝的輸入。

當你輸入輸入時,它會被終端緩存(cmd.exe,xterm,whatever)。在這一點上,你的程序仍然沒有「看到」任何輸入。只有在您按下回車鍵後,終端纔會將緩衝區內容發送到您的程序。

如果您在按Enter之前終止程序,則無法發送/處理任何內容。

0

你的程序應該可以正常工作。嘗試通過將文件重定向到它來運行它:

myprogram < somefile 

您觀察到的問題來自終端處理文件結尾。您可以在Windows中輸入Ctrl-Z<enter>,在Unix中輸入Ctrl-D來表示文件的結尾。

不過請注意,你應該寫你的程序是這樣的:

#include <stdio.h> 

int main(void) { 
    long nc; 
    nc = 0; 
    while (getchar() != EOF) { 
     ++nc; 
    } 
    printf("%ld\n", nc); 
    return 0; 
} 
0

getchar()直到EOF;因此,直到while循環退出(即,當getchar()函數返回EOF)時,您將看不到您的printf()輸出。

爲了發送EOF,您可以按CTRL + D。嘗試輸入你的輸入,然後按CTRL + D,看看是否有效。至少在UNIX/OS X中,這將發送EOF。您還可以比較字符,如果按下某個鍵,則退出循環並查看您的計數。

如果你正在從另一個程序輸出管道,那麼這應該可以正常工作,因爲輸出完成管道輸入後它會收到EOF。例如,cat file | ./counterprogram

相關問題