アプリ版:「スタンプのみでお礼する」機能のリリースについて

#include <stdio.h>

int main(void)
{
int i, c, counter[10] = {0}, n;

printf("数字を入力してください。(終了条件:Ctrl+Z)\n");
while ((c = getchar()) != EOF) {

n = c - '0';

if (n >= 0 && n <= 9) {

counter[n]++;
}
}
printf("\n入力した数字の個数\n");
for (i = 0; i < 10; i++) {
printf("%d : %d個入力\t", i, counter[i]);
}

return 0;
}
上のように入力した場合になぜかEORは未定義と表示されます・
これはどうしてなのでしょうか?
この式でいけるはずなのですが。
よろしくお願いします。

A 回答 (3件)

EOFなら stdio.h に定義されてる となっている。


stdio.h を開き
#define EOF ~~~
という行が存在するか確認する。
存在しない場合は EOFに相当する物を手で宣言する。
これは使用してるコンパイラやライブラリ群の性質によって変るが一般的には「-1」となっている模様

#define EOF -1

この回答への補足

早急な回答ありがとうございます。
無事解決できました。
それでですが、#define EOF-2でも実行してみたのですが、
#define EOF-1と同じような結果になりました。
しかし、プログラムを組んで行く上でこのような違いは
実行結果に違いとして出てくるのでしょうか?
よろしくお願いします。

補足日時:2006/10/15 22:39
    • good
    • 0

EOFマクロはC/C++言語標準ですから定義されてないってのはおかしいです。


コンパイラは何かわかりませんが、多分何か別原因があるはずです。

> しかし、プログラムを組んで行く上でこのような違いは
> 実行結果に違いとして出てくるのでしょうか?

EOFの値は負数としか規定が無いので、ライブラリの提供する値を使ってください。
ライブラリが提供する値と異なる値を使うと、実行時に正常に動かない可能性があります。
    • good
    • 0
この回答へのお礼

そーなんですか。
ならEOF-1で常時表示するようにします・

回答ありがとうございました。
また質問時にはよろしくお願いします。

お礼日時:2006/10/16 10:17

とりあえず、そのまま貼り付けると動かしてませんがコンパイルは通りますね。

(VC7.1sp1)

> 上のように入力した場合になぜかEORは未定義と表示されます・
ちゃんと見てませんが、単に「EOF」と「EOR」のtypo(打ち間違い)というオチでは?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
EOFに関してはちゃんと表示されてました。
EOFの宣言が出来ていなかったために通らなかったみたいです。
宣言した後は無事通りました。

ありがとうございました。
また質問することがあればよろしくお願いします。

お礼日時:2006/10/15 22:50

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