通过运算符输入多个字符串>> c ++

时间:2018-12-13 13:16:03

标签: c++ stream buffer cin

执行以下代码:

#include <string>
#include <iostream>
using namespace std;

int main() {
 string s;

 while(true) {
 cin >> s;
 cout << "type : " << s << endl;
 }
}

控制台的输出为:

输入usa americ england gana

输出

type : usa
type : americ
type : england 
type : gana

输入hello world

输出

type : hello
type : world

每当我键入“ usa americ englend gana”然后输入,它将在while块中显示通过cin输入的每个字符串。

有什么原因吗? “流如何缓冲”?

我如何做到这一点,以便每当通过cin输入多个字符串时,空格之间都不会产生分隔符?这个问题有什么特殊功能或答案吗?

1 个答案:

答案 0 :(得分:2)

operator>>中的std::cin的一次调用最多只能读取第一个空格。当您在一行中输入4个单词时,您的std::cin读取第一个单词,接受它,然后继续执行。但是其余3个单词仍在输入流中等待读取,并且在下次调用operator >>时将读取它们。

因此,为说明情况,这是一个示例:

Input stream content: [nothing]
//(type usa americ england gana)
Input stream content: usa americ england gana
//cin >> s;
s == "usa"
Input stream content: americ england gana
//cin >> s;
s == "americ";
Input stream content: england gana
//etc.

您可能想尝试使用std::getline阅读整行。 Just don't mix std::cin and std::getline

while(true) {
    std::getline(std::cin, s)
    cout << "type : " << endl;
}