• ベストアンサー

cout関数を使っているのですが,画面に出力されません。

いつもお世話になっております。今回はC++言語について質問があります。 次のプログラムは画面から入力された文字の数とリターンの数を数えるプ ログラムです。 /* 入力の文字数を数えるプログラム */ #include <iostream.h> int main(int argc, char **argv){ char c; int RETcount = 0; //改行数 int CHARcount = 0; //文字数 while(cin.get(c)){ if(c == '\n'){ ++RETcount; } else{ ++CHARcount; } } cout << "RET:" << RETcount << '\n'; //(1) ここの部分が表示されません。 cout << "CHAR:" << CHARcount << '\n';//(2) ここの部分は表示されます。 return 0; } 何故か(1)の部分が表示されません(^^; いきなり(2)の部分が表示されます。 そこで(1)(2)の部分を下記の(3)(4)(5)に書換え cout << "RET:" << RETcount << '\n'; //(3) cout << "RET:" << RETcount << '\n'; //(4) cout << "CHAR:" << CHARcount << '\n'; //(5) 実行した所(4)と(5)の部分は表示されるのですが, (3)の部分が表示されません。 つまりwhile{・・・・・}の直後のcoutが表示されません。 while(cin.get(c))で何かが起こっているのでしょうか????(^^; 使用環境は,Windowsで入力の終了は[Ctrl + Z]で行っています。 ご存知の方どうかご指導よろしくお願いします。

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

以下の環境で試したところ、問題の状況が再現しました^^; ・Windows98 + Borland C++ 5.5.1 for Win32 Ctrl+Zがあると、次の1行が表示されない(消される?)ようです。 多分MS-DOSのコンソール入出力制御が、そういう仕様なのでしょう。 ためしに出力をテキストファイルにリダイレクトしたところ、ちゃんと RET:2 CHAR:8 と書き込まれていましたから。 __sourin__さんも、DOS窓から「実行ファイル名 > test.txt」などとして、確認してみて下さい。 というわけで、(1)の前に、 cout << endl; としてやれば、DOS窓上で実行しても大丈夫みたいですね。 (C++では、'\n'の代わりにendlをcoutへ食わせても、改行になります。)

__sourin__
質問者

お礼

leaz024さんお返事どうもありがとうございます^^ ホントだ~!リダイレクトを使うと正しく表示されました。 逆に「実行ファイル名 < 入力データ.txt」でもDOS窓上に正しく表示されました。 leaz024さんのおしゃられた >MS-DOSのコンソール入出力制御が、そういう仕様なのでしょう。 など,調べてもう少し原因を探ってみようと思います。 進展があり次第投稿しますので,またご指導よろしくお願いします^^ ありがとうございました^^

その他の回答 (1)

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

以下の環境で試しましたが、 ・Linux-2.2.14 + egcs-2.91.66 ・Windows2000 + Borland C++ 5.5.1 for Win32 全く問題ありませんでしたよ。 あなたの環境が何かはわかりませんが、少なくともソースコード的には何の問題も無いようです。

__sourin__
質問者

補足

お返事どうもありがとうございます^^ 使用環境はWin98でVisual C++ 6.0を使っています。 >全く問題ありませんでしたよ。 とは(1)の部分も省略されず正常に動くという事なのでしょうか? 予定では abcd[return] abcd[return] [Ctrl + Z] RET:2 CHAR:8 となるはずなのに 私のものだと abcd[return] abcd[return] [Ctrl + Z] CHAR:8 と表示されてしまうのです。 >少なくともソースコード的には何の問題も無いようです。 私もそう思うのですが何故なのでしょうね?(^^;

関連するQ&A