我對C++和boost很陌生,我不明白這裏實際發生了什麼。boost split - cout和vector - 解釋這個行爲
所以我使用cin從用戶獲取一些輸入。然後,我將該空格字符串分解爲一個向量,並嘗試打印該向量的第一個索引。
我的代碼:
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();
}
我的控制檯打印功能只需使用普通的cout,這裏是它的代碼:
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;
}
發生了什麼事:
對於這個問題的緣故輸入是「開始」。
我只想打印第一個元素。沒有休息我的程序首先打印開始,然後打印出去。我確定程序做了2個循環,每次打印第一個元素,我知道這一點,因爲如果我有休息,那麼只有開始打印和程序結束。首先,這是爲什麼發生?爲什麼矢量的第一個索引被刪除,然後循環使第一個索引「去」?
這是否都與stringstream /緩衝區或某事有關。我對這些知之甚少。這是我的猜測,所以我試圖用cin.clear()重置緩衝區,並用args.clear()清空該矢量,但仍產生相同的結果。其次,如果我使用下面的代碼並試圖訪問第二個元素「去」我的程序只是崩潰。從我從上面的嘗試,我可以假設我正確地分割字符串。
是否有某種異步行爲正在進行,並且分割函數尚未完成?要麼?
任何幫助都會很棒。謝謝。
謝謝我正在努力:P 因此,cin >> cmd行只能讀取第一個空格? – user3238415
讀入字符串將跳過空格(空格,製表符,行尾),然後讀取(但不包括)第一個空格或EOF。 –