- ベストアンサー
標準ライブラリ関数で入力する時にEORが未定義と表示される
#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は未定義と表示されます・ これはどうしてなのでしょうか? この式でいけるはずなのですが。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
EOFなら stdio.h に定義されてる となっている。 stdio.h を開き #define EOF ~~~ という行が存在するか確認する。 存在しない場合は EOFに相当する物を手で宣言する。 これは使用してるコンパイラやライブラリ群の性質によって変るが一般的には「-1」となっている模様 #define EOF -1
その他の回答 (2)
- MrBan
- ベストアンサー率53% (331/615)
EOFマクロはC/C++言語標準ですから定義されてないってのはおかしいです。 コンパイラは何かわかりませんが、多分何か別原因があるはずです。 > しかし、プログラムを組んで行く上でこのような違いは > 実行結果に違いとして出てくるのでしょうか? EOFの値は負数としか規定が無いので、ライブラリの提供する値を使ってください。 ライブラリが提供する値と異なる値を使うと、実行時に正常に動かない可能性があります。
お礼
そーなんですか。 ならEOF-1で常時表示するようにします・ 回答ありがとうございました。 また質問時にはよろしくお願いします。
- MrBan
- ベストアンサー率53% (331/615)
とりあえず、そのまま貼り付けると動かしてませんがコンパイルは通りますね。(VC7.1sp1) > 上のように入力した場合になぜかEORは未定義と表示されます・ ちゃんと見てませんが、単に「EOF」と「EOR」のtypo(打ち間違い)というオチでは?
お礼
回答ありがとうございます。 EOFに関してはちゃんと表示されてました。 EOFの宣言が出来ていなかったために通らなかったみたいです。 宣言した後は無事通りました。 ありがとうございました。 また質問することがあればよろしくお願いします。
補足
早急な回答ありがとうございます。 無事解決できました。 それでですが、#define EOF-2でも実行してみたのですが、 #define EOF-1と同じような結果になりました。 しかし、プログラムを組んで行く上でこのような違いは 実行結果に違いとして出てくるのでしょうか? よろしくお願いします。