• ベストアンサー

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

  • 改行文字について

    #include<iostream> using namespace std; int main(void) { char c; while (cin.get(c)) if (c == '\n') cout << "[RET]\n"; else cout << c; return(0); } これのif (c == '\n')の改行文字と等しいとは何のことを指すのでしょうか? よろしくお願いします。

  • 入力文字数がでません。

    C++です。以下を実行したのですが、実行結果に改行数は出るが文字数がでません。お願いします。 #include <iostream.h> int main(void) { char c; int ccount = 0; int ncount = 0; while (cin.get(c)) { ccount++; if (c == '\n') ncount++; } cout << "文字数=" << ccount << '\n'; cout << "改行数=" << ncount << '\n'; return (0); }

  • 配列の練習問題

    #include<iostream> using namespace std; //count関数の宣言 int count(char str[], char ch); int main() { char str[100]; char ch; cout << "文字列を入力して下さい。\n"; cin >> str; cout << "文字列から探す文字を入力して下さい。\n"; cin >> ch; int c = count(str, ch); cout << str << "の中に" << ch << "は" << c << "個あります。\n"; return 0; } //count関数の定義 int count(char str[], char ch) { int i = 0; int c = 0; while (str[i]) { if (str[i] == ch) c++; i++; } return c; } こんにちは。 この問題の解答のプログラムの意味がイマイチ解らないので良かったら教えて下さい。 確認がてらに質問します。 よろしくお願いします。

  • 入力に出現する数字文字をカウントするプログラム

    こんにちは、毎度お世話になります。 #include<iostream> using namespace std; int main(void){ char c; int cnt[10] = {0}; while(cin.get(c)){ if(c >= '0' && c <= '9') cnt[c - '0']++; } for (int = 0; i < 10; i++) cout << i << "の出現回数:" << cnt[i] << '\n'; return(0); } [/code] ここで質問なんですが、このプログラムの中で数字文字をカウントしているのはどこでしょうか? そして while(cin.get(c)){ if(c >= '0' && c <= '9') cnt[c - '0']++; } ここの部分が何を表しているのか解りません。 よろしくお願いします。

  • char型変数のアドレスを coutで表示するには

    #include <iostream> using namespace std; int main() { bool b; int i; short s; long l; float f; double d; char c; //上で宣言した変数のアドレスを表示 cout << "bool &b " << &b << endl; cout << "int &i " << &i << endl; cout << "short &s " << &s << endl; cout << "long &l " << &l << endl; cout << "float &f " << &f << endl; cout << "double &d " << &d << endl; cout << "char &c " << &c << endl; //「char &c 」とのみ表示される cout << '\n'; //char型のみ printf で再表示 printf("char &c %p\n", &c); //「char &c ********」と表示される return 0; } 上のプログラムを実行すると cout << "char &c " << &c << endl; のところだけ、アドレスが表示されません。 printfを使えば、char型の変数のアドレスも表示されるのですが…。 coutを使ってchar型のアドレスを表示させるにはどうすればいいのでしょうか。 よろしくお願いします。

  • getlineについて

    現在getlineを用いてプログラムを作成しようとしているのですが、例えば #include <iostream> using std::cin; using std::cout; using std::endl; int main(){ char buffer[81]; while(!cin.eof()){ cin.getline(buffer,sizeof(buffer)); cout << buffer << endl; while((!cin.eof())&&cin.fail()){ cin.clear(); cin.ignore(80,'\n'); } } return 0; } というプログラムを作った場合、標準入力から各行を80文字だけ読み込み出力をするわけなんですが、 この80文字という文字制限をなくしたい場合どういった工夫をすればいいのでしょうか?

  • 合計値を求める関数

    #include<iostream> using namespace std; //sum関数の定義 int sum(int x, int y) { return x + y;  } int main() { int num1, num2, ans; cout << "1番目の整数を入力して下さい。\n"; cin >> num1; cout << "2番目の整数値を入力して下さい。\n"; cin >> num2; ans = sum(num1, num2); cout << "合計は" << ans << "です。\n"; return 0; }  ここのreturn x+y;の所の合計値を戻り値として返す処理の仕組みを解りやすく教えて欲しいです、戻り値はちょっと解りづらいです、よろしくお願いします。

  • インライン関数の使い道と理屈

    #include <iostream> using namespace std; //max関数の定義 inline int max(int x, int y){if(x>y) return x; else return y;} int main(){ int num1, num2, ans; cout << "1番目の整数を入力して下さい。\n"; cin >> num1; cout <<"2番目の整数を入力して下さい。\n"; cin >> num2; ans = max(num1, num2); cout << "最大値は" << ans << "です。\n"; return 0; } インライン関数の処理は呼び出し部分に埋め込まれるので、プログラムの処理速度が 向上することがありますとあるんですが、 どのような時にインライン関数は使用するのでしょうか? 理由もしくみもご教示お願いします。

  • coutにchar型の変数を使ったら表示が編です

    c1=100; c2=254; printf("c1=%d c2=%d\n",c1,c2); //うまくいく cout << "c1=" << c1 << "c2=" << c2 << "\n"; //変 cout << "c1=" << (int)c1 << "c2=" << (int)c2 << "\n"; //うまくいく なぜうまくいかないのでしょうか? また解決策はありますか? char型で数字を表示したいのですが

  • C++の関数テンプレートで分からないところがあります。

    C++の関数テンプレートで分からないところがあります。 C++の入門書を読んで勉強しているのですが、その演習問題(答えはついてないです)で、以下のような問題がありました。 ----------------------------------------------------- 配列の全要素の最小値を求める関数テンプレートを作成せよ。 teplate <class Type> Type minof(const Type x[], int n); という形で作ること。 なお、最も小さい文字列を求められるようにするために、const char *型に明示的に特殊化したものも合わせて作成すること。 ------------------------------------------------ という問題なのですが、これにたいして僕は以下のように答えました。ヘッダのインクルードなどは省きます。 template<class Type> Type minof(const Type x[], const int n) {     int min = 0;     for(int i = 1; i < n; i++)         if(x[min] < x[i])             min = i;     return x[min]; } template<> const char* minof<const char *>(const char x[][64], const int n) {     int min = 0;     for(int i = 1; i < n; i++)         if(strcmp(x[min], x[i]) < 0)             min = i;     return x[min]; } int main() {     const int n = 5;     int a[n];     char s[n][64];     for(int i = 0; i < n; i++){         cout << i + 1 << "番目---";         cin >> a[i];     }     cout << "文字列\n";     for(int i = 0; i < n; i++){         cout << i + 1 << "番目---";         cin >> s[i];     }     cout << "整数の最小値---" << minof(a, n) << "です\n";     cout << "文字列の最小値---" << minof<const char *>(s, n) << "です\n"; } これをコンパイルすると、エラーで 明示的な特殊化; 'const char *minof<const char*>(const char [][64],const int)' は関数テンプレートの特殊化ではありません と 'minof' : 1 番目の引数を 'char [5][64]' から 'const char *const []' に変換できません。 とでてしまいます。 色々探してみたのですが、解決できませんでした・・。 特に最初のほうのエラーがよくわかりません。ちゃんと特殊化してる気はするのですが・・。 間違っている箇所の正当を載せていただけるとわかりやすくて、ありがたいです。 よろしくお願いします!

このQ&Aのポイント
  • 25歳の女性が彼氏と別れるべきか悩んでいます。彼氏とは復縁した過去がありながらも約3年間交際をしていましたが、最近彼からの連絡が途絶え、会いたくないと言われました。
  • 彼は仕事が忙しいと言いつつも、彼女ではなく友達と会いたいと言っています。彼女は彼に愛されていないと感じ、彼からの連絡を待っていましたが、関係が良好に戻る希望が持てないため、別れを考えています。
  • 彼女は彼からの連絡を待つ約束をしていましたが、精神的に辛くなり、自分から連絡して別れた方が良いのか悩んでいます。彼女は彼の行動に失望し、関係に終止符を打つことを考えています。
回答を見る

専門家に質問してみよう