scanf関数やgetchar関数など、標準入力を取得する関数は多数あると思いますが、
どれもstdinファイルから文字列を取得しているわけですよね?
ネット上で、以下のようなプログラムをよく見かけます。
C
1while((ch = getchar()) != EOF) 2 putchar(c);
永久に終わりません・・・
1、例えば、you will make me happyと入力した場合、最後に改行コードが入ってstdinファイルに保存されると思うのですが・・・
ファイルの最後には、必ずEOFがあるので、入力した1行+改行コード+EOF
キーボードからの入力も必ず最後にEOFがあるですかね?
すると一回入力したら終了するのではないでしょうか??
getchar()はあまり使わないのでよく知らないのですが、scanf()の正規表現を使わない場合「改行」が区切りになるので、入力した1行のみの取得になるので、EOFによる条件では永遠に終了できないですよね?
getchar()も同じだとすると上記のようなプログラムの意味がちょっとわかりません・・・わざと無限ループにしたプログラムということでしょうか?
2、キーボードからEOFを入力することはできますか?
**#define EOF (-1)**だと思うのですが、-1を入力しても終了しないんですよね・・・
man asciiでやって、EOFのコードを調べてもEOFなんて出てこないです。
Linux 64bit Debian系です。
[追記]
標準出力の場合でも同じですね。
printf("you will make me happy\n");
stdoutファイルに1行+改行コード+EOFという風に入ると考えてよろしいのでしょうかね?
[追記2]
上記のようなプログラムは、getchar()はスペースや改行も取得するようなので、stdinファイルの最後のEOFがあれば終了しますよね?
つまり1行適当な文字列を入力すれば、それで終わるのではないでしょうか?
なぜ終了しないのですか?
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/02 14:51
2017/06/02 14:53
2017/06/02 14:59
2017/06/02 15:10
2017/06/02 15:17
2017/06/03 05:39