2012-04-07 8 views
1

次のコードがあります。 CTRL + Dを押すと、プログラムはそれをEOFとして認識しません。CTRL + D(EOF)がgetchar()で簡単なプログラムで検出されませんでしたか?

ほとんどのノート:

I gccを使用して、VMwareのプレーヤー 上のUbuntu 11.10を実行していると 'のstty -a' のEOF =^D

を示し コマンドラインからプログラムを実行しています任意の助けてくれてありがとう。..

1 #include <stdio.h> 
    2 
    3 int main() 
    4 { 
    5 int c, nl; 
    6 nl = 0; 
    7 while ((c != getchar()) != EOF) 
    8 { 
    9  if (c == '\n') 
10   ++nl; 
11 } 
12 printf("line: %d\n", nl); 
13 
14 return 0; 
15 } 

答えて

6

をお試しください
while ((c = getchar()) != EOF) 

それ以外の場合は、(c != getchar())の結果をEOFと比較しています。

3

while ((c != getchar()) != EOF)

これはgetchar()によって返された値に不平等のために(あなたが初期化されていない)int変数cの値を比較し

while ((c = getchar()) != EOF)

5
while ((c != getchar()) != EOF) 

する必要があります。この比較では0または1が得られますが、これは負のEOFにはなりません。

!=(不等式比較)を=(代入)に置き換えたいとします。

関連する問題