質問:C言語、C++(WinXP)でcoutへの出力内容をプログラム中で取得する方法はありますか?

このQ&Aのポイント
  • C言語やC++(WinXP)で、プログラム中でcoutへの出力内容を取得する方法があるかどうかについて質問します。具体的には、別のプログラムからA.exeを呼び出し、A.exeがcoutに出力した内容を取得して計算に使用することができるのか知りたいです。
  • A.exeの出力先がcoutではなくcerrの場合、同様の方法で出力内容を取得することはできるのかについても質問しています。
  • これらの質問に対する解決策や方法をご存知の方がいらっしゃいましたら、教えていただけると助かります。
回答を見る
  • ベストアンサー

coutへの出力内容をプログラム中で取得

C言語、C++(WinXP)で以下のようなことはできるのでしょうか。 例えば、 //A.cpp void main() { cout << 1 << endl; } というプログラムをA.exeという名前で作ったとします。そして、別のB.exeというプログラムを //B.cpp void main() { system( "A.exe" ); } として実行すると(A.exeとB.exeは同じフォルダにあるとして)、コマンドプロンプトに"1"と出力されますが、B.exe中でA.exeがcoutに出力した内容を取得してなんらかの計算をする、例えば、 //B.cpp void main() { system( "A.exe" ); int x; //xにcoutの内容"1"を取得する x *= 2; } のようなことはできるのでしょうか。また、A.exeの出力先がcoutではなくcerrの場合はどうでしょうか。 coutの場合はリダイレクトを使えば同様のことができるような気もするのですが、実際にやりたいのは、コマンドプロンプトで使う事を前提にして作ったプログラム(A.exeのような)があり、それをVC++6.0で作るダイアログベースのGUIプログラムから呼び出します。ただ、A.exeはエラーがあった場合等にcoutやcerrにメッセージを出力するので、GUIプログラム側でそれを取得してエディットボックスやメッセージボックスに出力したいのです。 このような事ができるのかどうかもわからないのですが、もし方法をご存知でしたらご教授をお願いします。

  • kary
  • お礼率95% (82/86)

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1
参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt__pipe.asp
kary
質問者

お礼

ご回答、ありがとうございます。参考URLを見てみましたが私には難しく、すぐには理解できそうにないのですが、少しずつ勉強してみたいと思います。

関連するQ&A

  • 2つのcppファイルから

    1つのexeファイルを作る必要性が出てきました。 (現在質問中の質問に関連しています。) 例えば file.cpp: #include<iostream> using namespace std; void Output(int x) { cout<<x<<endl; } void main(void) { for(int i=0;i<9;Output(i++)); } をコンパイルリンクすれば済むことを file1.cpp: #include<iostream> using namespace std; void Output(int x) { cout<<x<<endl; } file2.cpp: void main(void) { for(int i=0;i<9;Output(i++)); } という風に分かれているファイルをコンパイルリンクしなければならないのです。 cpp -e file.exe -c file1.cpp -c file2.cpp ではエラーになります。 どうすれば良いのでしょうか?

  • C++のプログラムが走りません。

    <<条件は以下です。>> データメンバ x:xの座標(ただし 0-1000とする) y:yの座標(ただし 0-1000とする) z:zの座標(ただし 0-1000とする) メンバ関数 void setX(int a): xの座標を設計する(範囲外の値は、error messageを出力する) void setY(int b): Yの座標を設計する(範囲外の値は、error messageを出力する) void setZ(int c) Zの座標を設計する(範囲外の値は、error messageを出力する) int getX(): Xの座標値を得る int getY(): Yの座標値を得る int getZ(): Zの座標値を得る << 不明な点は、 if文で、どう戻るかがわからないことと、 最後の結果表示の部分です。 以下が、作成したプログラムです。ネットで検索して類似しているプログラムを参考にしたんですが。 よろしくお願いします。>> #include <iostream> using namespace std; class Zahyou{ private: int getX();//Xの座標値を得る int getY();//Yの座標値を得る int getZ();//Zの座標値を得る int a,b,c; public: void setX(int a);//Xの座標を設計する void setY(int b);//Yの座標を設計する void setZ(int c);//Zの座標を設計する void show(); }; void Zahyou::show(){ cout << "The result is: (" << a << "," << b << "," << c << ")"; } void Zahyou::setX(int a){ cout << " Please Input X " << "\n "; cin >> a ; if(a < 0 && a > 1000){ cout << "The value of X is a mistake, Please input X again! " << " \n "; } } void Zahyou::setY(int b){ cout << "Please Input Y " << "\n "; cin >> b ; if(b < 0 && b > 1000){ cout << "The value of y is a mistake, Please input X again! " << " \n "; cin >> b ; } } void Zahyou::setZ(int c){ cout << " Please Input Z " << "\n "; cin >> c ; if(c < 0 && c > 1000){ cout << "The value of Z is a mistake, Please input X again! " << " \n "; cin >> c ; } } int main(){ Zahyou zahyou1; zahyou1.getX(); zahyou1.getY(); zahyou1.getZ(); zahyou1.show(); return 0; }

  • このプログラムについて

    class suuji{ public static void main(String args[]){ int x = 5 ; int z = 8 ; int k = x + z ; System.out.println(" z + x ="+ k); } } このようなチョー簡単なプログラムをコンパイルして実行して z + x =13 と表示されました。 ここで本題です。この z + x =のところを表示しなくなるような方法はありませんか? 具体的に言うとこの式の答えしか表示されない方法はありませんか? よろしくお願いします。 よかったらもうひとつ質問に答えてほしいのですが。 コマンドプロンプトでしかJavaのプログラムを実行できないのですが、コマンドプロンプトを使わず実行できる方法はありませんか? よろしくお願いします

    • ベストアンサー
    • Java
  • 別ソースファイル、同クラス名、同メンバ関数名で片方の関数しか呼ばれない

    環境は OS:Windows XP コンパイラ:C++Builder6 に付属の bcc32.exe です。 下の3つのソースファイルがあります。 bcc32 -c t1 bcc32 -c t2 bcc32 t t1.obj t2.obj でできる t.exe を実行すると、 f in t1.cpp f in t1.cpp と出力されます。 リンクエラーになるか、または f in t1.cpp f in t2.cpp と出力されることを期待したのですが・・・。 【質問】 複数のソースファイルで、同名のクラス、同名のメンバ関数を存在させたい のですがどうしたらよいでしょうか? ---------------------------------------- t1.cpp #include <iostream.h> class A { public: void f(void); }; void A::f(void) { cout << "f in t1.cpp\n"; } void sub1(void) { A a; a.f(); } ---------------------------------------- t2.cpp #include <iostream.h> class A { public: void f(void); }; void A::f(void) { cout << "f in t2.cpp\n"; } void sub2(void) { A a; a.f(); } ---------------------------------------- t.cpp extern void sub1(void), sub2(void); void main(void) { sub1(); sub2(); }

  • 下記、プログラム内の「char *」の役割

    C++初心者です。 縦長になってしまいますが、 『 #include <iostream.h> void show(int); void show(double); void show(char *);   ←左記の記述の使い方 int main(void) { show(1); show(0.25); show("文字列"); return 0; } void show(int x) { cout << x << endl; } void show(double y) { cout << y << endl; } void show(char *z) { cout << z << endl; } 』 のプログラムにおいて、「char *」の使い方がいまいち理解できません。 上記プログラムですとエラーが表示されないのですが、下記のプログラムだとエラーが発生します。 『 #include <iostream.h> void show(int); void show(double); void show(char);   //←---------上記と違う行 int main(void) { show(1); show(0.25); show("文字列"); return 0; } void show(int x) { cout << x << endl; } void show(double y) { cout << y << endl; } void show(char z) {  //←---------上記と違う行 cout << z << endl; } 』 なぜ、ポインタ(*)を付けないといけないのか分かりやすく教えていただけましょうか。

  • C++で解りません。

    C++で #include <iostream.h> int main(void) { int x; int y; cout << "xを入力してください:"; cin >> x; cout << "yを入力してください:"; cin >> y; cout << "x+yは" << x + y << "です。\n"; return 0; } ----------- で、 エラー E2206 a.cpp 19: 不正な文字 ' ' (0×8140) エラー E2206 a.cpp 19: 不正な文字 ' ' (0×8140) エラー E2206 a.cpp 19: 不正な文字 ' ' (0×8140) エラー E2206 a.cpp 19: 不正な文字 ' ' (0×8140) エラー E2206 a.cpp 19: 不正な文字 ' ' (0×8140) エラー E2206 a.cpp 19: 不正な文字 ' ' (0×8140) とでます。どこがおかしいのか解りません。

  • C++のファイルの分割について教えてください。

    分割したプログラムの書き方を練習中なのですが、 下のようなプログラムを書いて、ビルドしようとしたら失敗します。 どこが悪いのか、教えていただけないでしょうか? (5)\test30\Debug\test30.exe : fatal error LNK1120: 外部参照 1 が未解決です。 1>test30 - エラー 2、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== //test30.cpp #include <iostream> #include "sub.h" int main(void) { std::cout<<"メインプログラムです。"<<std::endl; sub1(); sub2(); return 0; } ------------------------------------------------------------- //sub1.cpp #include <iostream> void sub1(void) { std::cout<<"サブ1です。"<<std::endl; } ------------------------------------------------------------- //sub2.cpp #include <iostream> void sub1(void) { std::cout<<"サブ2です。"<<std::endl; } --------------------------------------------------------------- //sub.h void sub1(void); void sub2(void);

  • DOSでコンパイルしたらインクルードファイルがない?(開けない?)

    borland c++ コンパイラ5.5をインストールして コマンドプロンプトで実行したのですが こんなメッセージがでました。どうすればよいのでしょうか? ライブラリとかいるんでしょうか? C:\borland\bcc55\Bin>bcc32 ffff.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ffff.cpp: エラー E2209 ffff.cpp 1: インクルードファイル 'iostream.h' をオープンできない エラー E2451 ffff.cpp 5: 未定義のシンボル cout(関数 main() ) *** 2 errors in Compile *** ちなみにソースファイルの内容は以下のとおりです。 #include <iostream.h> void main(){ cout<<"ffff"; }

  • DOS画面をプリンタ出力

    MS-DOSプロンプトの画面をプリンタに出力されるプログラムを 作ろうと思いました。 #include <iostream.h> main(){ char ppp; cout << "pの入力でプリントします"; cin >> ppp; if (ppp=='p'){ cout << "pが入力された"; ここでプリンタ出力命令 } } プリンタ出力命令はどういう命令文を書ければいいのか 教えてください。

  • 【C++】関数からクラスに変更するには?

    いつも大変お世話になっています。 VC++初心者です。 関数をクラス化していきたいのですが、具体的にどのようにしたら良いか ご指導頂けませんでしょうか。 例えば、このようなソースがあった場合、どのようにクラス化させるのでしょうか。 (また、下記の例ですと、pulsとsubで1つのグループ、 goodMoringとgoodNightで1つのグループにさせる場合には どうすれば宜しいでしょうか。) //======================= //Tool.hの中身 //======================= int plus(int x, int y); int sub(int x, int y); void goodMorning(); void goodNight(); //======================= //Tool.cppの中身 //======================= #include <iostream.h> int plus(int x, int y){ return x + y; } int sub(int x, int y){ return x - y; } void goodMorning(){ cout << "おはよう\n"; } void goodNight(){ cout << "こんばんは\n"; } //======================= //Main.cppの中身 //======================= #include <iostream.h> #include "Tool.h" int main(){ int a = puls(1,1); cout << a <<'\n'; int b = puls(2,1); cout << b <<'\n'; goodMorning(); goodNight(); }