プロが教えるわが家の防犯対策術!

#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と言うのでしょうか。

A 回答 (4件)

くわしかないですが。


・Windowsのコマンドプロンプトでも^Zで入力終了です
#って違うことを訊いていたり?

・^ZはASCIIだと0x1aなのはその通りですが、getcharでそのキャラクタを
受け取るわけではありません。#3の回答にあるとおりです。
#(ストリームがバイナリの場合は別)

・テキストモードでファイルをオープンして読み込んでいる場合、
・・データの中に0x1aがあってそこに到達した
・・ファイルの終端に到達した
ときにEOFが返ってきます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/24 01:59

Ctrl + Z の入力がストリームの終端になるのは DOS の機能じゃなかったっけ?


UNIX では Ctrl + D が入力の終了で Ctrl + Z は Stop シグナルになるでしょう。

また、getchar() で戻される EOF は (-1) のことで、文字コードとしての 0x1a とは違います。

誰か詳しい人いないかなぁ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/24 01:57

EOFはファイルの終わりを示すため


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

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

お礼日時:2007/11/24 01:56

Enterキーではなく 『Ctrl+Z』を入力してみましょう



入力終了という意味です
本来は『End of File』の略です
昔はテキストファイルの入力がこれで終わりですよといった識別子に 0x1Aを使っていました
0x1Aをマークとしてはほとんど使いません
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/11/22 12:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています