2011-02-27 32 views
0

我正在學習k & r的c編程書。有此計劃數不字符的輸入如何在EOF發生後讀取任何東西

#include<stdio.h> 
main() 
{ 
long nc; 
nc=0; 
while(getchar()!=EOF) 
    ++nc; 
printf("%ld\n",nc); 
} 

我不知道怎麼來的EOF已發生可以打印NC後。有什麼辦法呢。

回答

2

文件結束條件僅影響stdin而不是stdout。請注意,找到EOF之後沒有stdin的用途,只是打印輸出爲stdout

+0

我完全理解,它們都是不同的流的輸入和輸出。但事情是當我運行這個程序。它就像一個無限循環,當我按(ctrl + z,即EOF)它終止而不打印nc(即運行printf行) – 2011-02-28 11:39:06

0

我想你會混淆兩個不同的東西。 EOF是關於輸入的。 printf是一個輸出函數。

+0

我完全明白它們都是不同的流輸入和輸出。但事情是當我運行這個程序。它就像一個無限循環,當我按下(ctrl + z即EOF)時,它終止而不打印nc(即運行printf行) – 2011-02-28 11:38:45

0

getchar()從標準輸入讀取。 printf()寫入標準輸出。它們是通常映射到同一物理設備(控制檯或終端)的不同流。

+0

我完全明白它們都是不同的流輸入和輸出。但事情是當我運行這個程序。它就像一個無限循環,當我按下(ctrl + z即EOF)時,它終止而不打印nc(即運行printf行) – 2011-02-28 11:42:19

0

你不應該在按Ctrl-Z或任何終止 如果你指望着這點和傳統的* nix炮彈運行,你將暫停你的過程,而不是終止輸入計數(任務控制閱讀起來,在man bash ,例如)

(我知道這個答案來得有點晚,但我看到你一直在您迴應其他答案)

如果你是,你可以使用CTRL-在* nix系統上提按Ctrl-Z D,但不要期望最終在你的輸入流中(它只是用作信號機制).m你也可以用一個文件輸入來測試它,它應該給你比ty更一致的結果平,即

a.out < prog.c 

計數在C程序中的線

相關問題