如何从控制台读取空格分隔数字?

Ash*_*sha 8 c++ iostream stl

我正在尝试做一个简单的任务,从控制台读取空格分隔的数字到一个vector<int>,但我没有得到如何正确地做到这一点.

这是我到目前为止所做的事情:

int n = 0;
vector<int> steps;
while(cin>>n)
{
    steps.push_back(n);
}
Run Code Online (Sandbox Code Playgroud)

但是,这需要用户按下无效字符(例如a)来打破while循环.我不想要它.

一旦用户输入数字0 2 3 4 5和按下,Enter我希望循环被打破.我试着用istream_iteratorcin.getline也,但我无法得到它的工作.

我不知道用户将输入多少元素,因此我正在使用vector.

请建议正确的方法来做到这一点.

jon*_*sca 12

使用getline与a 组合istringstream来提取数字.

std::string input;
getline(cin, input);
std::istringstream iss(input);
int temp;
while(iss >> temp)
{
   yourvector.push_back(temp);
}
Run Code Online (Sandbox Code Playgroud)

  • #include &lt;sstream&gt; 否则你会得到一个错误“istringstream iss hasinitializer but incomplete type” (2认同)

tem*_*def 8

为了详细说明jonsca的答案,假设用户忠实地输入有效整数,这是一种可能性:

string input;
getline(cin, input);

istringstream parser(input);
vector<int> numbers;

numbers.insert(numbers.begin(),
               istream_iterator<int>(parser), istream_iterator<int>());
Run Code Online (Sandbox Code Playgroud)

这将正确地读取和解析有效的整数行cin.请注意,这是使用自由函数 getline,它与std::strings一起使用,而不是istream::getline与C风格的字符串一起使用.