2017-03-24 7 views
0

私は準備ができているあらかじめ書かれた例を使ってC++コードを評価するシステムを書こうとしています。これは、次のような非常に単純なC++コードです:C++プログラムの出力を変数bashに送る

#include <iostream> 
using namespace std; 
int main() 
{ 
    int a; 
    cin >> a; 
    if (a > 100) 
     cout << "Big"; 
    else 
     cout << "Small"; 
    return 0; 
} 

だから私は変数を獲得し、最終的にそれをエコー宣言は、bashでこのプログラムをテストし、グレードしたいです。ここでまた、私は(まだあなたが私の例についてはbashを使用するための簡単な方法を伝えることができればそうbashに非常に新しいです

#!/bin/bash 
g++ new.cpp -o new 
test1=101 
test2=78 
score=0 
if [ "Result of executing ./new with $test1 variable as input"=="Big" ] 
then 
((score += 50)) 
fi 
if [ "Result of executing ./new with $test2 variable as input"=="Small" ] 
then 
((score += 50)) 
fi 
echo $score 

(私は二重引用符で書いて助けを必要とどこがマークした)私が書いたものです私はそれを聞くのが大好きです。 ありがとう!

+0

IMHO、一時ファイルを使用することが容易になるだろうが。あなたのC++プログラムは、あなたの 'bash'スクリプトが読むことができる一時ファイルに書き込む必要があります。 –

+0

見てください:http://www.shellcheck.net/ – Cyrus

+0

'' [$ test1変数を入力とした./newを実行した結果 "==" Big "]'は常に真です。 ./newで$ test 1変数を入力== Bigとすると空文字列になります。 ''は変な獣です。 –

答えて

1

あなたがのparamsで新しいを実行し、その結果を取得したい場合は、このような何か試してみてください:

#!/bin/bash 
g++ new.cpp -o new 
test1=101 
test2=78 
score=0 
if [ $(./new $test1) == "Big" ]; then 
    ((score += 50)) 
fi 
if [ $(./new $test2) == "Small" ]; then 
    ((score += 50)) 
fi 
echo $score 
+0

'[]'の中でコマンド置換 '$()'を引用するか、 'new'の出力にスペースが含まれているとスクリプトが中断します。引用符で囲まれていなければ、出力もグロブ展開の対象になります。 –

+0

あるいは、[[]] 'を使うこともできます。これは引用符で囲みます。とにかく '=='はバッシュ主義だから、他のバッシュツールも使うべきなのです。 –

関連する問題