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

下記リストをWindows98、BCC5.5及び、MinGWでコンパイルして実行
する場合、/*注*/の1行をコメントアウトしますとその下のcountが
画面に表示されません。私にはこれは理解の出来ないことで、かな
り悩んでいます。どなたかお分かりになる方いらしゃいましたら、
ご教授願います。

#include <stdio.h>

int main()
{
int ch,count=0;
printf("文字を入力して下さい。\n");
while((ch=getc(stdin))!=EOF)
{
if(ch==' ')
{
count++;
}
}
/*注*/ printf("\n");
printf("count of space = %d \n",count);
return 0;
}

A 回答 (3件)

特別間違いはありません。


Borland C コマンドライン版&DOS窓では問題なく動いています。
    • good
    • 0
この回答へのお礼

フォローありがとうございます。コマンドラインからのコンパイル実行も
IDEツールからの実行も変わりなく、Windows98での結果はすべてだめでし
た。
 ただいろいろと考えた末、ぼんやりと原因が分かってきたような気もし
ます。ひょっとしますとgetc 関数の基本的な動作について大きな誤解を
していたかもしれません。
 それで問題なく動いています、といいますのはWindows98ですね。
XPやLinuxで問題なく動くのは確認していますので、、、。

お礼日時:2005/03/20 22:12

失礼しました。

Windows98を見落としていました。
0x0aを出力しないと、画面出力がうまくいかないようです。
はっきりしたことはわかりませんが、ストリーム入出力のBUGがXPで修正されたのではないですか。
    • good
    • 0
この回答へのお礼

 やはり98では同じような現象が起こることを知りやっとワンス
テップを通過できました。ありがとうございます。
 getcの中身は知らないのですが、単純に一文字入力と考えてい
ましたが、結構デリケートな問題があるようですね。getcにEOF
検出をさせること自体がひょっとして使い方をあやまっているの
ではないかと思うようになりました。
 どうもありがとうございました。

お礼日時:2005/03/21 17:56

getcだけではなくて、ストリーム入出力の問題のようです。

昔ディスプレイがなかった時代にラインプリンタに結果を出力していましたが、その時代のなごりだと聞いたことがあります。プリンタの印刷開始の合図として改行コード(0x0a)を送っていたらしいです。
以前プログラマの仕事をしていたときに、先輩のプログラマが、
printf("\nメッセージ");
という書き方をしていたので、聞いてみたところこのような現象を回避するためだと説明されたことがあります。
前回の回答でBUGと書きましたが、BUGというより古い仕様というのが正しいのかもしれません。
    • good
    • 0
この回答へのお礼

 ストリームの問題なのですね。ぼんやりとその辺のことを感じて
いましたが、ご経験談をお聞きしましてはっきりとしました。
 今回の件ではいろいろと勉強させていただき感謝しています。
どうもありがとうございました。

お礼日時:2005/03/21 22:41

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