プログラムの連続実行(VC++ 2010)

このQ&Aのポイント
  • Visual C++ 2010 Expressを使用してコンソールアプリケーションの開発についての質問。
  • P1とP2という2つのプロジェクトを含むソリューションで、P1.exeとP2.exeを連続して実行する方法についての質問。
  • Ctrl+F5で実行すると、スタートアッププロジェクトのexeファイルしか実行されないため、どうすればP1.exeが実行された後にP2.exeを実行することができるか質問。
回答を見る
  • ベストアンサー

プログラムの連続実行(VC++ 2010)

こんにちは。 現在、「Visual C++ 2010 Express」を使って、コンソールアプリケーションの開発について勉強しています。 どうしてもわからないことが出てきたので、質問させて下さい。 今、Sという名前のソリューションに、P1とP2という、2つのプロジェクトが含まれているとします。 P1をビルドして作成されたP1.exeは、1つのファイルに、適当なデータを出力します。 P2をビルドして作成されたP2.exeは、そのファイルの内容を読み取って、標準出力に出力します。 Visual C++ 2010 Expressでは、[Ctrl]+[F5]で、作成されたexeファイルを実行できるのですが、 どうやら、スタートアッププロジェクトのexeファイルしか実行されないようなんです。 [Ctrl]+[F5]によって、P1.exeが実行された後に、P2.exeが実行されるようにするには、どうすればよいのでしょうか? プロジェクトやソリューションのプロパティをいじってみたのですが、 どうも上手くいかなかったので、質問させて頂きました。 一応、P1とP2のソースファイルの内容を、以下に載せておきます。 ・P1.cpp ----------------------------------------------- int main(int argc, char *argv[]) { char str[1000]; //出力用にファイルをオープンする。 ofstream fw("file.txt"); if(!fw){ cout<<"「file.txt」が開けない!\n"; exit(1); } //ファイルにデータを書き込む。 cout<<"出力ファイルに書き込む文字列を入力せよ。"<<endl; cin>>str; fw<<str<<endl; fw<<100<<endl; fw<<200<<endl; fw.close(); return 0; } ----------------------------------------------- ・P2.cpp ----------------------------------------------- int main(int argc, char *argv[]) { char ch; //読み取り用にファイルをオープンする。 ifstream fr("file.txt"); if(!fr){ cout<<"「file.txt」が開けない!\n"; exit(1); } cout<<"file.txtの内容を読み込み、以下に表示する。\n"; while( fr.get(ch) ){ cout<<ch; } return 0; } ----------------------------------------------- ちなみに、各プロジェクトの「作業ディレクトリ」は、 共通のディレクトリに設定しているので、 「file.txt」は、そこで入出力されるようになっています。 以上、よろしくお願い致します。

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

  • ベストアンサー
  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.1

現在2つのプロジェクトにはそれぞれ2つのソースプログラムがあります。P1.cppとP2.cppです。それを若干作り変えます。 例えばP1_sub.cppという別のソースを作成し、その中にP1_sub()という関数を作成しP1.cppのmain()関数内の内容を引越しさせます。そしてP1.cppのmain関数からP1_sub関数を呼び出すようにします。 P2に関しても同様です。 新たにP3というプロジェクトを作成してmain関数からP1_sub()関数とP2_sub関数を呼び出すようにします。P3.exeを実行させればいいのではないでしょうか ?

MetalLover
質問者

お礼

御回答ありがとうございます。 確かに、ご提案頂いた方法で、今回のプログラムはきちんと動作します。 ですが、今回例に出したプログラムは、あくまで例であって、 P1とP2の実行ファイルを、[Ctrl]+[F5]で、 順番に実行できるように設定したかったんです。

関連するQ&A

  • プログラムの動作の仕方

    この下のプログラムは、WRITE <ファイル名>をコマンド行で入力すると、動作するプログラムなのですが、この通りにWRITE <test>としてもできません。 やり方を教えてください. #include <iostream> #include <fstream> using namespace std; int main(int argc,char *argv[]) { if(argc!=2){ cout << "使い方:WRITE<ファイル名>" << endl; return 1; } ofstream out(argv[1]); //出力ファイル if(!out){ cout << "出力ファイルが開けません" << endl; return 1; } char str[80]; cout << "文字列をディスクに書き込み、$で停止します" << endl; do{ cout << ": "; cin >> str; out << str << endl; }while(*str!='$'); out.close(); return 0; } お願いします。

  • Sortプログラムについて2

    えっと、前回もSortのプログラムについて、質問させていただいたのですが、このプログラムでは、二つのファイルを使ってソートしてるのですが、一つのファイルだけを使って、それに上書きするためにはどうするればいいでしょうか? 下に、ソースを貼っておきます。 #include <iostream> #include <fstream> #include <list> #include <string> using namespace std; int main() { char Str[255]; list<string> str; int count = 0; ifstream in("ttest", ios::binary | ios::in); if (!in){ cout << "入力ファイルが読み込めない" << endl; exit(1); } ofstream out("out", ios::binary | ios::out); if (!out){ cout << "出力ファイルが読み込めない" << endl; exit(1); } while (!in.eof()){ //!!!! in.getline(Str,255); str.push_back(Str); count++; } str.sort(); list<string>::iterator p; p = str.begin(); while(p!=str.end()){ out << *p << endl; p++; } in.close(); out.close(); getchar(); return 0; } よろしくお願いします。

  • Sortプログラムについて

    自分で作成したプログラムなのですが、ソートしたあと、出力ファイルに書き込みたいのですが、書き込めません。 どこが、悪いのかわからないので教えてください。 ところどころに、出力がありますが、それはトレースしたやつなので、それはほっといてくださって構いません。 下にプログラムを載せます。 よろしくお願いします。 #include <iostream> #include <fstream> #include <list> #include <string> using namespace std; int main() { char Str[255]; list<string> str; ifstream in("ttest", ios::binary | ios::in); if (!in){ cout << "入力ファイルが読み込めない" << endl; exit(1); } ofstream out("out", ios::binary | ios::out); if (!out){ cout << "出力ファイルが読み込めない" << endl; exit(1); } while (!in.eof()){ //!!!! in.getline(Str,255); str.push_back(Str); } str.sort(); list<string>::iterator p; p = str.begin(); while (!in.eof()){ cout << *p; out << *p++; } in.close(); out.close(); getchar(); return 0; }

  • プログラムの動作

    10文字をスキップするプログラムなのですが、どのようにスキップしているのかわからないので教えてください。 下にソースコードを書きます。 #include <iostream> using namespace std; //10文字をスキップする istream &skipchar(istream &stream) { int i; char c; for(i=0; i<10; i++)stream >> c; return stream; } int main() { char str[80]; cout << "いくつかの文字を入力する:"; cin >> skipchar >> str; cout << str << endl; return 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型のアドレスを表示させるにはどうすればいいのでしょうか。 よろしくお願いします。

  • 実行できません

    #include<iostream> #include<cstring> using namespace std; void reverse(char *str,int count=0); int main(){ char *s1="this is a test."; reverse(s1); cout<<s1; return 0; } void reverse(char *str,int count){ int i,j; char temp; if(!count)count=strlen(str)-1; for(i=0,j=count;i<j;i++,j--){ temp=str[i]; str[i]=str[j]; str[j]=temp; } } これはあるサンプルプログラムなのですが、visual studio 2008でコンパイルしたらこのように実行ファイルはできるのですが実行できません。 C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\xlocale(342) : warning C 4530: C++ 例外処理を使っていますが、アンワインド セマンティクスは有効にはなりま せん。/EHsc を指定してください。 Microsoft (R) Incremental Linker Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. /out:samplem.exe samplem.obj どうしてでしょうか?よろしくお願いします。

  • 段落毎に配列に挿入するには?

    C++の基本的な配列でわからないことがあります。 例えば以下のような,3段落があるテキストファイルを用意しておき, -------------- //abc.txt abcde fghij klmno -------------- 用意した配列char data[3][20]へ, 上から順番にdata[0]に"abcde",data[1]に"fghij",data[2]に"klmno"を挿入したいです。 とりあえず1行だけ,以下のようなプログラムで出力表示できました。 #include <string> #include <iostream> using namespace std; int main() { char cir_data[3][20]; string filename("abc.txt"); FILE* fp = fopen( filename.c_str(), "r" ); fgets(data[0], 20, fp); cout << data[0] << endl; fclose(fp); return 0; } 結果は, -------------------- abcde -------------------- となったので,2・3番目もforループでできるかなと思ったら,良い結果が出ません。 以下は間違えているプログラムです。 int main() { char cir_data[3][20]; int i; string filename("abc.txt"); FILE* fp = fopen( filename.c_str(), "r" ); for(i=0; ; ){ fgets(cir_data[i], 20, fp); if(strlen(cir_data[i])<3) break; if(cir_data[i][0] != '/') i++; cout << cir_data[i] << endl; } fclose(fp); cout << "i = " << i << endl; return 0; } 結果は文字化けしてます。 何回ループしたか,iも出力してみましたが,なぜか6回カウントされています。 どこが誤っているのかわからず困っています。

  • newかFILEでエラーのような

    エラーがおこらないと思うんだけど、実行時エラーです。 コンソールアプリケーションのソースを見てください。 fclose(fp); を2行上に移動した場合はエラーにはなりません。 これはどうしてエラーになるんですか? test.txtは、同じディレクトリにある0バイトのファイルです。 #include <windows.h> #include <iostream.h> int main(){  WIN32_FIND_DATA finddata;  FILE *fp;  char *str;  char **pp;  FindClose(FindFirstFile("test.txt", &finddata));  fp = fopen("test.txt", "r");  if(fp){   str = new char[14];   fclose(fp);   strcpy(str, "abcdefghijklm");   pp = new char*[3];   pp = &str;   delete [] *pp;   delete [] str;  }else cout << endl;  return 0; }

  • int型変数をchar型変数に格納する方法

    int型数値をchar型変数に格納したいのですが、 sprintf()とatoi()を用いてやりましたが、 うまくいきません。 考えたコードを下記します。 int get_y(){ int y=2005; return y; } int main(){ char year; char str[5]; //intをcharに変換して格納している sprintf(str,"%d",get_y()); //数値として代入 year=atoi(str); //yearには2005が格納されていない! cout<<year<<endl; char ans; //このchar型変数に数値を代入する。 ans=year; cout<<ans<<endl; return 0; } お手数をお掛けしますが、 よろしくお願い致します。

  • VC++で作成したプログラムが2重に実行される

     バージョンはVC++ 2010 Express SP1、OSはWin Vista 32bitです。例えばWin32コンソールアプリケーションのプロジェクトを作成し、以下のようなソースコードをビルドしたとします。 #include <iostream> #include <cstdlib> using namespace std; int main() { cout << "Hello, world!" << endl; system("PAUSE"); }  作成されたexeファイル(添付画像の1.exe)をダブルクリックで起動すると、画像のように2つのプロセスが開始され、1つのウィンドウが開きます。何かキーを押すとこのウィンドウが閉じるわけですが、その時、メモリ使用サイズの大きい方のプロセスが消え、小さい方のプロセスだけ残ります。そして、閉じたウィンドウと同じ"Hello, world!"と表示されたウィンドウがまた開きます。これを閉じるとプロセスも完全に終了します。  どうやら、同じプログラムが意図せず2重に実行されてしまうみたいなのです。Debugモードでも、Releaseモードでも、上記の例と全く異なるソースコードでも、Win32プロジェクトでも同様の現象が生じてしまいます。以前は1つのプロセスとしてプログラムが実行されていたのではなかったかと思うのですが、どの設定項目が影響してこの現象を生じてると考えられますか?あるいは、コンパイラが壊れてるのでしょうか(以前、VC++ 2008 Expressと共生させていたことがあります)?どうか皆様のお知恵をお貸しください。

専門家に質問してみよう