7

良い一日、

Process オブジェクトと Runtime.exec() 関数呼び出しを使用して、複数の C++ で記述されたプログラムを起動する Java プログラムを記述しました。C++ プログラムは、入力と出力に cout と cin を使用します。Java プログラムは、情報を送信し、C++ プログラムの入力ストリームと出力ストリームから情報を読み取ります。

次に、C++ プログラムの入力と出力を文字列バッファーに追加することによって、プログラムの典型的な対話がどのように見えるかを構築する文字列バッファーを作成します。問題は、すべての入力呼び出しが追加されてから、すべての出力呼び出しがポストされることです。たとえば、StringBuffer のインスタンスは次のようになります...

2
3
Please enter two numbers to add. Your result is 5

プログラムが標準コンソールで次のように表示される場合

Please enter two numbers to add. 2
3
Your result is 5

問題は、C++ プログラムが cout.flush() 関数を呼び出さない限り、入力が与えられる前に出力が書き込まれないため、入力と出力の順序がすべて狂ってしまうことです。

C++ プログラムが cout.flush() の呼び出しを心配する必要がないように、バッファを自動的にフラッシュする方法はありますか? C++ プログラムがコマンド コンソールと対話するスタンドアロン プログラムであるかのように、プログラマは必ずしも cout.flush() を必要とせず、コマンド コンソールは入力の前にデータを出力します。

ありがとうございました、

4

2 に答える 2

3

すべての問題が解決するとは保証できませんが、cout使用できるときにストリームを自動的にフラッシュするにはendl

例えば:

cout << "Please enter two numbers to add: " << endl;

using"\n"は、次のようにストリームをフラッシュしません。

cout << "Please enter two numbers to add:\n";

endl多くの出力を行っている場合、使用は(比較的)遅くなる可能性があることに注意してください

詳細については、この質問を参照してください

于 2012-06-13T17:20:50.797 に答える