如何用cin一次存储一个值?

时间:2016-02-12 07:12:33

标签: c++ validation input user-input

我正在尝试为多个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保留输入流中的值有关,但是如何让它一次只接受一个值?

1 个答案:

答案 0 :(得分:2)

使用std::getline阅读整行,然后使用std::istringstreamboost::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');