これは私のコード例です。私はa
、ENTER
、+ Z
CTRL
を置く場合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
となることを期待しています。ループが壊れてしまいます。つまり、私の文字列はa
、EOF
、\n
のように解析されます。
なぜループの後にセミコロンがありますか? – byxor
@BrandonIbbotsonループを使用すると、 'cnt 'がインクリメントされます。 –
@SouravGhosh意味がある。ありがとう。 – byxor