我正在尝试做一个简单的任务,从控制台读取空格分隔的数字到一个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_iterator和cin.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)
为了详细说明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风格的字符串一起使用.