[英]Strange cout behavior in a while loop in C++
我正在尝试打印输入内容,然后打印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:
有人知道这里出了什么问题吗? 我想原因与缓冲区的工作方式有关,但是我真的不知道细节。
用>>
串流到一个字符串中会读取一个单词,直到一个空格字符。 因此,您将获得两个单独的输入: "Hello"
和"world"
。
要阅读整行:
getline(cin, input);
缓冲区工作正常。 opreator>>
背后的逻辑是……嗯……有点复杂。 实际上,您正在使用一个独立的operator>>
作为输入流和一个字符串-this no(2) 。
关键部分是:
[...]然后读取字符[...],直到满足以下条件之一:
[...]
std::isspace(c,is.getloc())
对于in中的下一个字符c为true(此空白字符保留在输入流中)。
这意味着它会“吃掉”输入,直到满足空白(根据当前语言环境)。 当然,正如迈克所说,整行都有getline
。
还值得记住这个nitpick: 为什么cin命令在缓冲区中留下一个'\\ n'?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.