我希望从一行中获取用户的多个数字,并将其存储在矢量中。我就是这样做的:
vector<int> numbers;
int x;
while (cin >> x)
numbers.push_back(x);
然而,在输入我的号码并按下回车后,就像这样:
1 2 3 4 5
它将数字放在向量中,然后等待更多输入,这意味着我必须输入Ctrl+Z
才能退出循环。获取一行整数后如何自动退出循环,这样我就不必输入Ctrl+Z
?
答案 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();
}
}