我怎么才能使用cin一次?

时间:2014-10-09 06:00:06

标签: c++

我希望从一行中获取用户的多个数字,并将其存储在矢量中。我就是这样做的:

vector<int> numbers;
int x;
while (cin >> x)
    numbers.push_back(x);

然而,在输入我的号码并按下回车后,就像这样:

1 2 3 4 5

它将数字放在向量中,然后等待更多输入,这意味着我必须输入Ctrl+Z才能退出循环。获取一行整数后如何自动退出循环,这样我就不必输入Ctrl+Z

2 个答案:

答案 0 :(得分:9)

实现这一目标的最简单方法是使用字符串流:

#include <sstream>
//....

std::string str;
std::getline( std::cin, str ); // Get entire line as string
std::istringstream ss(str);

while ( ss >> x ) // Now grab the integers
    numbers.push_back(x); 

要验证输入,请在循环后执行以下操作:

if( !ss.eof() )
{
   // Invalid Input, throw exception, etc
}

答案 1 :(得分:0)

while (std::cin.peek() != '\n') {
    std::cin >> x;
    numbers.push_back(x);
}

<强>更新

while (std::cin.peek() != '\n') {
    std::cin >> x;
    numbers.push_back(x);

    // workaround for problem from comment
    int tmp;
    while (!isdigit(tmp = std::cin.peek()) && tmp != '\n') {
      std::cin.get();
    }
}