2013-11-27 56 views
0

我工作的一個C源代碼,並獲得輸入它該程序如何停止輸入?

while(!feof(stdin)){ 
     fscanf(stdin, "%d ... 

我無法理解的是你怎麼得到它停止服用輸入和處理輸入? Ctr + Z只是殺死整個過程,我嘗試按輸入一堆沒有輸入,它不起作用。

回答

7

EOF(通常與值-1的define)在Linux指示器將匹配CTRL + d爲文本文件(ASCII碼4)。它足夠通用,可用於二進制和文本文件,也可用於不同的環境(例如,它將與DOS/Windows上的文本文件匹配CTRL + Z)。

在你的情況循環將退出時,用戶將鍵入CTRL + d作爲輸入,因爲輸入數據流將到達它的結束(然後feof()將返回非零)。

若要查看此方法的缺點(not so obvious behavior),請嘗試自己輸入一些文本,然後輸入printf(使用各種輸入,終止於行首或中間)。有關更多詳情,另請參閱this post

更好的(至少令人驚訝的)實現可能會避免fscanf並依賴於fgets返回值(例如)。比較其行爲與此:

char buffer[80]; 
while (fgets(buffer, sizeof(buffer), stdin) != NULL) { 
    // ... 
} 
+0

它應該是大寫d?我試着用小寫,它在這臺機器上工作。 – Celeritas

+1

沒有大寫/小寫CTRL + D。它只是ASCII碼4(CTRL-D是生成該碼的捷徑)。 –