• ベストアンサー

コマンドプロンプトからの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と言うのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

くわしかないですが。 ・Windowsのコマンドプロンプトでも^Zで入力終了です #って違うことを訊いていたり? ・^ZはASCIIだと0x1aなのはその通りですが、getcharでそのキャラクタを 受け取るわけではありません。#3の回答にあるとおりです。 #(ストリームがバイナリの場合は別) ・テキストモードでファイルをオープンして読み込んでいる場合、 ・・データの中に0x1aがあってそこに到達した ・・ファイルの終端に到達した ときにEOFが返ってきます。

beterugius
質問者

お礼

ありがとうございました。

その他の回答 (3)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

Ctrl + Z の入力がストリームの終端になるのは DOS の機能じゃなかったっけ? UNIX では Ctrl + D が入力の終了で Ctrl + Z は Stop シグナルになるでしょう。 また、getchar() で戻される EOF は (-1) のことで、文字コードとしての 0x1a とは違います。 誰か詳しい人いないかなぁ。

beterugius
質問者

お礼

ありがとうございました。

  • yaha_2007
  • ベストアンサー率21% (13/61)
回答No.2

EOFはファイルの終わりを示すため ファイル末尾に付く1byteのデータです。 何かファイルを用意して以下のようなプログラムで どんなデータがEOFとして使われてるか確認してみても 面白いかもしれません。 ------------------------------------- char dat; FILE fp; fp=fopen("filename","r"); fseek(fp, 0, SEEK_END); fscanf(fp,"%c",&dat); printf("%x",dat); -------------------------------------- ※確認とってないのであしからず^^

beterugius
質問者

お礼

ありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Enterキーではなく 『Ctrl+Z』を入力してみましょう 入力終了という意味です 本来は『End of File』の略です 昔はテキストファイルの入力がこれで終わりですよといった識別子に 0x1Aを使っていました 0x1Aをマークとしてはほとんど使いません

beterugius
質問者

お礼

うまく動きました。 どうもありがとうございました。

関連するQ&A