我正在尝试为多个double
变量分配值,而我正在使用std::cin
。但是如果用户使用空格,它会跳过变量。
应该如何:
Please enter the value for var1: 1 [Space] 2 [Space] 3
Please enter one variable at a time.
Please enter the value for var1: 1 [Enter]
Please enter the value for var2: 2 [Enter]
Please enter the value for var3: 3 [Enter]
You have entered the values, 1, 2 and 3 for var1, var2 and var3.
现在正在做什么:
Please enter the value for var1: 1 [Space] 2 [Space] 3
Please enter the value for var2:
Please enter the value for var3:
You have entered the values, 1, 2 and 3 for var1, var2 and var3.
我知道它与std::cin
保留输入流中的值有关,但是如何让它一次只接受一个值?
答案 0 :(得分:2)
使用std::getline
阅读整行,然后使用std::istringstream
或boost::lexical_cast
对其进行解析。
std::istringstream
版本就像(未经测试):
std::getline(std::cin, line);
std::istringstream iss(line);
double value;
if(!(iss >> value))
{
iss.clear();
// invalid value
}
else if(iss.rdbuf()->in_avail() > 0)
{
// there are more characters in the stream
}
如果您不想向用户提供任何反馈,您可以这样做(没有std::getline
):
if(!(std::cin >> value))
{
std::cin.clear();
// invalid value
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');