我正在尝试打印输入,然后打印tk向量中的所有字符串,如下面的程序:
int main() {
while (true) {
string input;
cout << "prompt: ";
cin >> input;
vector<string> tk = {"this", "is", "an", "example"};
cout << input << endl;
for (int i = 0; i < tk.size(); i++) {
cout << tk[i] << endl;
}
}
return 0;
}
当我输入“Hello world”时,我希望输出为:
Hello world
this
is
an
example
prompt:
但输出是:
Hello
this
is
an
example
prompt: world
this
is
an
example
prompt:
有谁知道这里出了什么问题?我猜原因与缓冲区的工作方式有关,但我真的不知道细节。
答案 0 :(得分:3)
使用>>
流式传输到字符串中,读取单个字,最多为空白字符。因此,您可以获得两个单独的输入"Hello"
和"world"
。
阅读整行:
getline(cin, input);
答案 1 :(得分:0)
缓冲区工作正常。 opreator>>
背后的逻辑是......嗯......有点复杂。实际上,您使用自由站立的operator>>
作为输入流和字符串 - this no (2)。
关键部分是:
[...]然后读取字符[...],直到满足以下条件之一:
[...]
std::isspace(c,is.getloc())
对于is中的下一个字符c是正确的(此空白字符保留在输入流中)。
这意味着&#34;吃掉&#34;输入直到满足空白区域(根据当前区域设置)。当然,迈克说,对于整行来说,有getline
。