C++ C++;

C++ C++;,c++,iostream,C++,Iostream,我试图打印输入,然后打印tk向量中的所有字符串,如以下程序所示: int main() { while (true) { string input; cout << "prompt: "; cin >> input; vector<string> tk = {"this", "is", "an", "example"}; cout << input <

我试图打印输入,然后打印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
this
is
an
example
prompt: world
this
is 
an
example
prompt:

有人知道这里出了什么问题吗?我想原因与缓冲区的工作方式有关,但我真的不知道细节。

使用
>
将数据流化为字符串,读取单个单词,最多一个空格字符。因此您得到两个独立的输入,
“Hello”
“world”

要阅读整行:

getline(cin, input);

使用
>
将数据流传输到字符串中可读取单个单词,最多可读取一个空白字符。因此您得到两个独立的输入,
“Hello”
“world”

要阅读整行:

getline(cin, input);

使用
>
将数据流传输到字符串中可读取单个单词,最多可读取一个空白字符。因此您得到两个独立的输入,
“Hello”
“world”

要阅读整行:

getline(cin, input);

使用
>
将数据流传输到字符串中可读取单个单词,最多可读取一个空白字符。因此您得到两个独立的输入,
“Hello”
“world”

要阅读整行:

getline(cin, input);

缓冲区工作正常。
opreator>
背后的逻辑是。。。嗯。。。有点复杂。实际上,您正在使用一个独立的
操作符>
作为输入流和一个字符串-

关键部分是:

[…]然后读取字符[…],直到下列条件之一变为真:

[……]

  • std::isspace(c,is.getloc())
    对于is中的下一个字符c为true(此空白字符保留在输入流中)
这意味着它“吃掉”输入,直到满足空白(根据当前区域设置)。当然,正如Mike所说,对于整行,有
getline


还有一点值得记住:

缓冲区工作正常。
opreator>
背后的逻辑是。。。嗯。。。有点复杂。实际上,您正在使用一个独立的
操作符>
作为输入流和一个字符串-

关键部分是:

[…]然后读取字符[…],直到下列条件之一变为真:

[……]

  • std::isspace(c,is.getloc())
    对于is中的下一个字符c为true(此空白字符保留在输入流中)
这意味着它“吃掉”输入,直到满足空白(根据当前区域设置)。当然,正如Mike所说,对于整行,有
getline


还有一点值得记住:

缓冲区工作正常。
opreator>
背后的逻辑是。。。嗯。。。有点复杂。实际上,您正在使用一个独立的
操作符>
作为输入流和一个字符串-

关键部分是:

[…]然后读取字符[…],直到下列条件之一变为真:

[……]

  • std::isspace(c,is.getloc())
    对于is中的下一个字符c为true(此空白字符保留在输入流中)
这意味着它“吃掉”输入,直到满足空白(根据当前区域设置)。当然,正如Mike所说,对于整行,有
getline


还有一点值得记住:

缓冲区工作正常。
opreator>
背后的逻辑是。。。嗯。。。有点复杂。实际上,您正在使用一个独立的
操作符>
作为输入流和一个字符串-

关键部分是:

[…]然后读取字符[…],直到下列条件之一变为真:

[……]

  • std::isspace(c,is.getloc())
    对于is中的下一个字符c为true(此空白字符保留在输入流中)
这意味着它“吃掉”输入,直到满足空白(根据当前区域设置)。当然,正如Mike所说,对于整行,有
getline


还有一点值得记住:

这件事每天都会发生。人们总是忘记(或者他们没有正确地阅读他们的C++书籍),<代码> >代码>到一个字符串中。这个“问题”肯定有常见问题吗?每天都会出现类似的问题。人们总是忘记(或者他们没有正确地阅读他们的C++书籍),<代码> >代码>到一个字符串中。这个“问题”肯定有常见问题吗?每天都会出现类似的问题。人们总是忘记(或者他们没有正确地阅读他们的C++书籍),<代码> >代码>到一个字符串中。这个“问题”肯定有常见问题吗?每天都会出现类似的问题。人们总是忘记(或者他们没有正确地阅读他们的C++书籍),<代码> >代码>到一个字符串中。这个“问题”肯定有常见问题解答?可能是@dkg:No的重复,它会读取整个流(直到文件结尾或错误),不会给你一个字符串。@dkg:No,它会读取整个流(直到文件结尾或错误),不会给你一个字符串。@dkg:No,它会读取整个流(直到文件结尾或一个错误),不会给你一个字符串。@dkg:不,这会读取整个流(直到文件结尾或一个错误),也不会给你一个字符串。