1

したがって、基本的に必要なのは特定のコードではなく (もちろんそれは素晴らしいことです)、目標を達成するためのアイデアと方法だけです。

1) C++ でプログラムを作成する必要があります。これは、毎回少しずつ異なる C++ コードの小さな例を生成します。(これは私にとっては問題ありません。テンプレートを使用し、コード内のいくつかの変数をランダム化します。これにより、毎回一意になります。)

2) 生成されたコードを表示し、ユーザーは入力する必要があります。コードが出力すると考えているものです。

そして、ここから問題が始まります:

3) 生成されたコードを何らかの形でコンパイルして、プログラムが出力するテキストを含む文字列を取得する必要があります。

4) 次に、文字列をユーザーが入力したものと比較します。

したがって、ステップ3)で停止し、助けなしでは理解できません...生成されたコードを.cppファイルの関数に記述して、その関数を呼び出すことを考えていましたが、取得できませんでしたうまくいかないので、専門家に尋ねるべきだと思い始めました。これを達成する方法やアイデアが他にもあるかもしれません。

4

6 に答える 6

2
  1. .cpp ファイルを書き込む
  2. コンパイラ (または make または同等のビルド システム) を呼び出す
  3. コンパイルが失敗した場合、おそらくエラーが表示されますか?
  4. コンパイルが成功したら、結果のプログラムを実行し、出力を表示します

system2/3/4 をスクリプトにラップし、それをorで呼び出すのがおそらく最も簡単popenです。スクリプトは、ファイル名が一意であることを確認したり、stderr を stdout に折りたたんだりすることができます。

実行中のプログラムは、コンパイルされたコードと実際に対話するのではなく、出力を読み取るだけなので、別のプロセスとして保持するのがおそらく最も簡単です。スクリプトは、コンパイラの出力/エラーをプログラムの出力と区別するのに役立つマークアップを追加できます。


私は何年もバッチ ファイルを作成していませんが、コマンド ライン ( ref )からコンパイラを実行する方法がわかれば、次のようなスクリプトを作成できます。

  1. .cppファイルをコンパイルする
  2. 結果を実行する.exe
  3. 出力をファイルにリダイレクトする

次に、C++ では、コードを.cppスクリプトが期待するファイルに保存し、スクリプトを のように実行してsystem("myScript.bat")、出力ファイルを読み取るだけです。

個別のバッチ スクリプトを作成したくない場合は、system一度呼び出してコンパイラを呼び出し、もう一度呼び出して結果の.exe.

于 2012-04-16T12:22:15.003 に答える
1

C++ をスクリプト化する方法を探していると思います。http://www.softintegration.com/またはこのスタックオーバーフローの質問を見てくださいClangをスクリプトインタープリターとしてC++コードに埋め込むためのチュートリアルはありますか? .

于 2012-04-16T12:11:51.963 に答える
0

私はこれを使用していませんが、無料であり、コンパイルも解釈もしません。あなたの問題に非常に適しており、一撃の価値があります...

http://root.cern.ch/drupal/content/cint

于 2012-04-16T12:24:14.427 に答える
0

外部ツールを呼び出すのと同じように、C++ コンパイラを呼び出すことができます。たとえばsystem("g++ test.cpp")、 popen など、プラットフォームで提供されているものを使用します。

コンパイラを実装するライブラリをプログラムに統合することも検討できます。そのためには、clang と llvm を調べてください。

于 2012-04-16T14:37:00.213 に答える
0

system() 呼び出しを使用して、生成されたコードをスタンドアロンでコンパイルしないのはなぜですか? system("g++ temp.cpp -o temp.exe); --このようなもので、戻り値に基づいて、system("temp.exe"); のように temp.exe を再度実行できます。もちろん、出力を印刷できます。 temp.exe からファイルに変換し、そのファイルを読み取って temp.exe の出力を現在のプログラムに取得します。

于 2012-04-16T12:26:30.183 に答える
0

ジョーディのようなものは機能しますか?

于 2012-04-16T12:42:07.777 に答える