2016-12-08 8 views
1

これは私のコード例です。私はaENTER、+ ZCTRLを置く場合ENTERは、私が期待した結果を取得し、なぜ私はEOFを取得していないのですか?

main(){ 
    long cnt; // chars count 
    int c; 

    /* Why the 'for' cicle doesn't finish when I input the 
    * "a^Z" string and press ENTER? At this case '^Z' is 
    * CTRL + Z (i.e this is EOF). I expected the second loop 
    * will get the EOF (i.e. -1), but it has 26 instead of. Why? 
    */ 
    for(cnt = 0; (c = getchar()) != EOF; ++cnt) 
     ; 

    printf("Chars count: %ld", cnt); 
} 

CTRL + Z休憩ループ私は私のコメントに質問を書きました。

UPD

私はgetchar機能に関する情報を読んだとき、私はそれがラインバッファ型入力を使用していることを見ました。データをプッシュするためにはENTERが必要です。私はそれがまたの情報を見ることができなかったので、それがCtrl - Zになるとデータをプッシュできます。したがって、私は2番目の値が私の場合EOFとなることを期待しています。ループが壊れてしまいます。つまり、私の文字列はaEOF\nのように解析されます。

+0

なぜループの後にセミコロンがありますか? – byxor

+2

@BrandonIbbotsonループを使用すると、 'cnt 'がインクリメントされます。 –

+0

@SouravGhosh意味がある。ありがとう。 – byxor

答えて

1

あなたはZ + + CTRLを押し、をEnterキーを押すと、CTRL + Zを入力(stdin)をフラッシュし、次の入力がない\n、ありますEOFCTRL + Zを2回押して2回目のシミュレーションを実行する必要があります。EOF

+0

私はまだ理解していません...「\ n」の値は「10」ですが、私は '26'を取得します。 –

+1

@AndreyBushmanどのようにチェックしますか? –

+0

MS Visual Studioの* Watch *ウィンドウで値を調べます。 –

関連する問題