- ベストアンサー
コマンドプロンプトからのEOFの入力方法について
#include <stdio.h> main(){ int cnt[10]; int c; int i; for(i=0; i<10; i++){ cnt[i] = 0; } while((c=getchar())!=EOF){ if(c>='0' && c<='9'){ cnt[c-'0']++; } } for(i=0; i<10; i++){ printf("%d : %d", i, cnt[i]); } } という、キーボードから入力した数値の個数を 表示するプログラムを、VisualC++で、Win32consoleアプリケーションで作ったのですが、 コマンドプロンプトから何個かの数値を入力したあと、Enterキーを押しても 何の反応もありません。 キーボードから「EOF」を入力するにはどうすればよいのでしょうか。 または、どういう状態をEOFと言うのでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
くわしかないですが。 ・Windowsのコマンドプロンプトでも^Zで入力終了です #って違うことを訊いていたり? ・^ZはASCIIだと0x1aなのはその通りですが、getcharでそのキャラクタを 受け取るわけではありません。#3の回答にあるとおりです。 #(ストリームがバイナリの場合は別) ・テキストモードでファイルをオープンして読み込んでいる場合、 ・・データの中に0x1aがあってそこに到達した ・・ファイルの終端に到達した ときにEOFが返ってきます。
その他の回答 (3)
- koko_u_
- ベストアンサー率18% (459/2509)
Ctrl + Z の入力がストリームの終端になるのは DOS の機能じゃなかったっけ? UNIX では Ctrl + D が入力の終了で Ctrl + Z は Stop シグナルになるでしょう。 また、getchar() で戻される EOF は (-1) のことで、文字コードとしての 0x1a とは違います。 誰か詳しい人いないかなぁ。
お礼
ありがとうございました。
- yaha_2007
- ベストアンサー率21% (13/61)
EOFはファイルの終わりを示すため ファイル末尾に付く1byteのデータです。 何かファイルを用意して以下のようなプログラムで どんなデータがEOFとして使われてるか確認してみても 面白いかもしれません。 ------------------------------------- char dat; FILE fp; fp=fopen("filename","r"); fseek(fp, 0, SEEK_END); fscanf(fp,"%c",&dat); printf("%x",dat); -------------------------------------- ※確認とってないのであしからず^^
お礼
ありがとうございました。
- redfox63
- ベストアンサー率71% (1325/1856)
Enterキーではなく 『Ctrl+Z』を入力してみましょう 入力終了という意味です 本来は『End of File』の略です 昔はテキストファイルの入力がこれで終わりですよといった識別子に 0x1Aを使っていました 0x1Aをマークとしてはほとんど使いません
お礼
うまく動きました。 どうもありがとうございました。
お礼
ありがとうございました。