• ベストアンサー

coutの出力バッファ

MrBanの回答

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.3

#2の方の補足(ここでは「面倒」の例で挙げられているので蛇足か…)です。 ありがちな入出力の交差(cin⇔cout等)には解決策があり、 実用的にはbasic_istream::tie()というメンバ関数が用意されています。

関連するQ&A

  • coutで出力した文字を消去するためには?

    coutで出力した文字を消す方法はないのかと思い質問させていただきました。 繰り返し処理を行うとき、その完了具合を%で表示させようとしています。百分率の数字を0~100まで増加させていく感じで出力させたいのですが、その方法がわからなくて質問しました。 結構、この部分の処理に時間がかかるので、できれば、完了具合を表示できればと思って、このようにしたいと思いました。 C++のプログラミング環境は、LinuxでIntelコンパイラを使っています。 int i; for(i=0; i<繰り返し回数; i++){ [繰り返し処理の内容] } のような感じで処理を行っています。for文の繰り返しの済み具合を表示したいです。 coutで表示した完了の程度を消去して、再度表示して、再度消去するのかと思うのですが、別に、もっとよい方法があれば教えていただきたいと思います。

  • 無限ループで出力ストリームが表示されないのはなぜですか?

    次のソースコードをVC++で実行したところ、入力の表示ができませんでした。 でも、無限ループを削除すると、正常に表示されます。 非常に基本的な質問かもしれませんが、理由がわかりません。 ご存知でしたら教えてください。よろしくお願い致します。 #include <iostream.h> int main() { char ss[80]; cout << "何か入力してください:"; cin >> ss; cout << "入力したのは[" << ss << "]です\n"; for(;;) { } }

  • static変数のループ内での処理

    以下のc++ソース内で、static int b = 100;という式ですが、 1回目に、ここの処理を通ったときに静的変数が作成されると思います。 2回目のループのときに、ここでまたb=100と初期化されています。 ですが、ループを重ねるごとに、カウントが1増えていきます。 staticなので、これは期待通りの動作だとは思うのですが、なぜそうなるのかがわかりません。 コンパイラなどが、staticが頭に付いたものは、2度目のループ以降はこの行を無視するように しているのでしょうか? もしそうなら、他に暗黙のルール?のようなことが他にもあるのでしょうか? 考えるとさらにc++がわからなくなってきました。 #include <windows.h> #include <iostream> using namespace std; void test(){ int a = 100; cout << a << " " << &a << endl; static int b = 100; cout << b << " " << &b << endl; b++; int * abc = new int [10]; abc[0] = 9999; cout << abc <<" "<< &abc << " " << abc[0] << endl; delete [] abc; } int main(){ while (1){ Sleep(2000); test(); } } 教えてください。 よろしくお願いいたします。

  • C++のファイルに対する配列データの読み書き

    C++で配列c[0],c[1],....の値をファイルに出力すると、 1.2 3.2 5.1 8.2 -9.1 のようになると思います(この例は配列のサイズが5)。実際は100以上の配列にします。 プログラム的にはだいたい下のようになると思っています。 std::ofstream ofs( "test.txt" ); ofs << ここで並びの出力をするはず? << std::endl; 意味は、出力ファイルの定義とストリームによる書き出し?と改行だと思います。 並びの出力ですから、ループでよいのでしょうか。プログラム作法が分からないので教えて頂きたいのですが。データの区切りは空白で、できれば書く数値のフォーマットは揃えたいですが。 次に、読み込むときはどうなるでしょうか。 std::ifstream ifs( "test.txt" ); std::string str; ifs >> str; std::cout << str << std::endl; これだと読んだデータを画面表示して終わりです。配列に読み込む方法なのですが。 よろしくお願いします。

  • 点数の大きい順に出力する

    #include <iostream> using namespace std; int main() { const int num = 5; int test[num]; cout << num << "人の点数を入力して下さい。\n"; for(int i=0; i<num; i++){ cin >> test[i]; } } } } for(int j=0; j<num; j++){ cout << j+1 << "番目の人の点数は" << test[j]<< "です。\n"; } return 0; } ---------- の for(int s=0; s<num-1; s++){ for(int t=s+1; t<num; t++){ if(test[t] > test[s]){ int tmp = test[t]; test[t] = test[s]; test[s] = tmp; の部分が理解できません。 s<num-1 は 0<4; ということでしょうか? 値が5つ入力されその値が if(test[t] > test[s]){ にどの様に挿入されるのかが 解りません。  

  • あっているか教えてください。

    #include <iostream> int main() { int i1, k1, k2; std::cin >> k1 >> k2; while (k1 > 0 || k2 > 0) { for (i1 = 0; i1 < k1; i1++) std::cout << "A"; for (i1 = 0; i1 < k2; i1++) std::cout << "B"; std::cout << std::endl; std::cin >> k1 >> k2; } return 0; } このプログラムで下記のような問題 図形の出力 [問題]いくつかの整数データの組が入力されるものとする.各組のデータは,それぞれ,1行に出力する文字数を表しており,最初のデータは文字 G の出力数,また,次のデータは文字 A の出力数を表しているものとする.データを読み込み,指定された出力を行うプログラムを書け.なお,データは,「0 0」を入力することによって終了するものとする がじっこうできるでしょうか。.

  • 構造体のサイズが意味不明の数になります・・・

    構造体のサイズのことですが、ご存知の方がいたら教えてください。 まず、↓のプログラムを実行させたのですが、 #include<iostream> using namespace std; struct test{ short a; int b; short c; }; int main(){ cout<<sizeof(test); return 0; } 結果として8が出力されることを予想していましたが、なぜか12が出力されました。 shortは4バイトだったのかな、と思ったのですが cout<<sizeof(short); でやってみたところ結果はやはり2でした。 もちろん cout<<sizeof(int); の結果は4です。 さらに分からない所は struct test{ int b; short a; short c; }; int main(){ cout<<sizeof(test); return 0; } このように構造体の中身を入れ替えたところ正しく8が出力されました。 visual c++ 2008 express editionを使っています。 OSはvistaです。

  • C++の文字列バッファの幅は4の倍数になる?

    VisualC++でテストを行ってみたのですが、たとえば、 const char* sa = "a"; cout << (int)sa[1] << " "; cout << (int)sa[2] << " "; cout << (int)sa[3] << " "; というような処理を書くと、表示される結果は必ず "0 0 0" となります。 また、 const char* sa = "a"; const char* sb = "bb"; const char* sc = "ccc"; const char* sd = "dddd"; const char* se = "eeeee"; .... のように文字列を定義しメモリの中身を見ると、各文字列が必ず4の倍数の幅で取得され、余りの部分には0が確保されているらしく、上記の場合ですと、メモリの内容が sa -> a000 sb -> bb00 sc -> ccc0 sd -> dddd0000 se -> eeeee000 という風に確保されているようなのですが、これは正式なC++の仕様なのでしょうか? もし正しい仕様であれば、それが明記されているサイト、資料等を教えていただければありがたいです。 もしくはそうでない場合、上記のようにならない(たとえば sa[3] != 0 となる)具体的な条件、再現方法を教えて頂きたいです。 宜しくお願いします。

  • c++ 出力ファイル名

    c++ 初心者 です。fortran 77fortran 90でしたら幾分わかります。 c++ のプログラムで、for 文やwhile文の中に出力させる文章を置いて、出力されるファイル名をforやwhileの変数に関連ずけるには、どういったものを書けばよいでしょうか? たとえば、以下のようなプログラムを書いて実行すると、"test"という文が書かれた"1"というファイル名のファイルが出力されます。 / / / / / / / / / / / / / / / / / / / #include <iostream> #include <fstream> using namespace std; int main() { ofstream of; of.open("1", ios::app); of << "test" << endl; of.close(); return 0; } / / / / / / / / / / / / / / / / / / / 上のプログラムの中の出力ファイル名は"1"ですが、これをfor文等のループの中で"1"~"10"として10個のファイルを出力したいです。 以下のように書くと、"i"というファイルに"test"という文字が10個書き込まれます。 / / / / / / / / / / / / / / / / / / / #include <iostream> #include <fstream> using namespace std; int main() { int i; ofstream of;   for(i=0; i<=10; i++) {     of.open("i", ios::app);     of << "test" << endl;     of.close(); } return 0; } / / / / / / / / / / / / / / / / / / / 上のプログラムの中の"i"のクオーテーションマーク""をとって of.open(i, ios::app); のように書いたらエラーでコンパイルできません。また、 of.open((char*) i, ios::app); のように書くとコンパイルはできますが、ファイルができません。 ファイル名"1"に"test" ファイル名"2"に"test" ファイル名"3"に"test" ・ ・ ・ ファイル名"10に"test" という風に出力できればいいのですが... わかる方すみませんが、ご指導願います

  • 仮想関数について困っています

    仮想関数について困っています C++を現在勉強中でその中で困ったことができました。 仮想関数についてまだ分かっていないことが多いのですが、一応以下のように使うものだと学びました。 class test{  public:   virtual void run(){    std::cout<<"testクラス"<<std::endl;   } }; class test_sub:public test{  public:   void run(){    std::cout<<"test_subクラス"<<std::endl;   } }; int main(){  test *t_s;  t_s=new test_sub;  t_s->run(); } ※includeは省略させていただきます こうすれば「test_subクラス」と出力されるはずです。 そこで本題なのですが自作のarrayクラスのようなものはテンプレートクラスになっているのですが array<test*> data; data[0].run(); のように使うと「testクラス」と表示されてしまいます。 これを解決する方法は何かないでしょうか? ご存じの方がいましたら教えていただけると助かります。