イメージ対話型プロンプトを使用したコンソールプログラム。C++では、cinの流れを制御する方法
ユーザーのコマンドは論理的にセミコロンで分割されます。
ここに簡略化されたコードがあります。
#include <iostream>
#include <string>
using namespace std;
int main() {
bool exit = false;
string line;
string input_str;
do {
cout << "propmt> " << flush;
while (getline(cin, line) && !line.empty()) {
if (!input_str.empty()) {
input_str += " ";
}
input_str += line;
auto size = input_str.find_first_of(';');
// find a semicolon
if (size != string::npos) {
/* some code deal with part of string before semicolon */
cout << "\nsample output\nsample output\nsample output\n" << endl;
input_str.erase(0, size + 1);
if (!input_str.empty()) {
cout << " -> " << flush;
} else {
cout << "propmt> " << flush;
}
}
} // getline loop
} while (!exit);
return 0;
}
問題は入力がこのような場合です(注:この入力には1つのリターンキーのみ)。
ユーザーは、コマンドラインにコピーして貼り付け、手動で入力しないでください。
AAAAAAAAAAAAA; BBBBBBBBBB
BBBBBBBBBBBBB;
私のプログラムの出力は次のようになります。
propmt> AAAAAAAAAAAAA; BBBBBBBBBB
BBBBBBBBBBBBB;
sample output
sample output
sample output
->
しかし、私はこの部分BBBBBBBBBBBBB;
は私のサンプル出力の後にあったたいと思います。
それはこのようにする必要があります:
propmt> AAAAAAAAAAAAA; BBBBBBBBBB
sample output
sample output
sample output
-> BBBBBBBBBBBBB;
、ユーザー入力が別のキーを入力したときに、その後、プログラムは全体B
コマンドに対処し、その結果を示すことができました。
これは、cursesのようなライブラリでより直接的に制御したい場合を除き、コンソールのエコー機能の一部です。 – aschepler