while文とsystemの組合せ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
コハク

while文とsystemの組合せ

#1

投稿記事 by コハク » 9年前

ifstream ifs("ls_data.txt");
string str;
char buff[200];
int count=0;
while(getline(ifs,str)){
sprintf(buff,"g++ point.cpp & ./a data/%s data_tra.txt data_tra_check.txt",str.c_str());
system(buff);
Sleep(2000);
cout<<count<<" "<<str.c_str()<<endl;
count++;
if(count==10){break;}
}

dataというサブディレクトリの中にあるファイル名をls_data.txtに書き出してあり, その名前をひとつづつ読み込み, point.cppというプログラムに入力し,
data_tra.txtにその結果を出力, data_tra_check.txtに読み込んだファイル名を書きだしています.

ところが, ファイルの読み込みが終了したのにも関わらず, while文が終了せず, countは0, 1, 2, …, 9, 0, 1, 2, ...,9, 0,...と繰り返します.
system(buff)を消したところ, while文は正常に終了することができました.
while文とsystem関数は同時に用いることができないのでしょうか, 良い方法があったら教えて欲しいです.

かずま

Re: while文とsystemの組合せ

#2

投稿記事 by かずま » 9年前

cygwin 上で実行していますね。

system() の中の "g++ point.cpp & ./a ..." の & を ; に変更する。

さらに、この system() を含むプログラムの実行ファイル名を
a.exe から別のもの、例えば b.exe に変更し、./b で起動する。

これでどうなるでしょうか?

point.cpp を毎回コンパイルするのは無駄な気がします。

アバター
コハク
記事: 8
登録日時: 9年前

Re: while文とsystemの組合せ

#3

投稿記事 by コハク » 9年前

ありがとうございます!
&を;に直したところループの重複がなくなりました.

>cygwin 上で実行していますね。
はいcygwinで実行しています

>point.cpp を毎回コンパイルするのは無駄な気がします。
その通りでした. 実行時間を短くするためにもwhile文から出そうと思います.

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: while文とsystemの組合せ

#4

投稿記事 by Dixq (管理人) » 9年前

上のフォーラムルールにある通り、ソースコードはcodeタグで囲んでくださいね。

アバター
コハク
記事: 8
登録日時: 9年前

Re: while文とsystemの組合せ

#5

投稿記事 by コハク » 9年前

すみません.次からは気をつけます.

コード:

ifstream ifs("ls_data.txt"); 
string str;
char buff[200];
int count=0;
while(getline(ifs,str)){
sprintf(buff,"g++ point.cpp & ./a data/%s data_tra.txt data_tra_check.txt",str.c_str());
system(buff);
Sleep(2000);
cout<<count<<" "<<str.c_str()<<endl;
count++;
if(count==10){break;}
}
一応再掲します.

閉鎖

“C言語何でも質問掲示板” へ戻る