私はC++をかなり新しくしています。実際に何が起こっているのか分かりません。boost split - coutとvector - これの動作を説明してください
だから私はユーザーから入力を得るためにcinを使用しています。次に、その文字列をベクトルに分割し、ベクトルの最初のインデックスを印刷しようとしています。
マイコード:
int Console::print(std::string message, int color)
{
HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consoleHandle, brightGreen);
std::cout << "myconsole :: ";
SetConsoleTextAttribute(consoleHandle, color);
std::cout << message << "\n";
return 0;
}
何が起こっている:
この質問のために、ここではそのためのコードは私のコンソール印刷機能は普通のCOUTを使用しています
std::string cmd;
std::vector<std::string> args;
while (std::cin >> cmd) {
boost::split(args, cmd, boost::is_any_of(" "), boost::token_compress_on);
Console::print(args[0]);
break;
//reset the vector
//std::cin.clear();
//args.clear();
}
です入力は「開始」です。
最初の要素を印刷したいだけです。ブレークせずに、私のプログラムは最初にプリントを開始し、それからプリントアウトします。私はプログラムが2つのループを行い、毎回最初の要素を出力すると判断しました。なぜなら、ブレークがあると印刷が始まり、プログラムが終了するからです。まず、なぜこれが起こっているのですか?なぜ、ベクトルの最初のインデックスが削除されてループされ、最初のインデックスが "go"になりますか?
これは、すべてストリングストリーム/バッファまたは何かと関係がありますか?私はこれらについてあまり知らない。これは私の推測でしたので、バッファをcin.clear()でリセットし、args.clear()でベクトルを空にしましたが、それでも同じ結果が得られました。
次のコードを使用して2番目の要素「go」にアクセスしようとすると、プログラムがクラッシュするだけです。上記から試したことから、私は正しく文字列を分割していると仮定することができます。
非同期動作が発生していますが、分割機能はまだ完了していませんか?または?
ご協力いただければ幸いです。ありがとう。
ありがとう私はそれに取り組んでいます:P シン>> cmdの行だけが最初のスペースに読み取りますか? – user3238415
文字列を読み込むと空白(空白、タブ、行末)がスキップされ、最初の空白やEOFまで読み込まれます。 –