仅接受用户输入c ++中的数字

时间:2014-12-05 05:29:37

标签: c++

现在我正在使用此功能来获取用户输入。

int getOnlyNumber(int num)
{
    while (!(cin >> num)) {
        // Reset the input:
        cin.clear();
        // Get rid of the bad input before return was pressed:
        while (cin.get() != '\n')
        {
            continue;
        }
        // Ask user to try again:
        cout << "Please enter a number:  ";
    }
    return num;
}

如果首先输入字母,这似乎只能捕获错误的输入。如果首先输入一个数字,程序会接受它。防爆。它将接受1e但会捕获e1。 这是这样使用的:

displayChoice = getOnlyNumber(displayChoice);

其中displayChoice是一个int。 我需要更改以捕获1e作为输入或任何其他以数字开头但具有字符串的输入?

2 个答案:

答案 0 :(得分:0)

如果你给它一个部分数字,那么,默认情况下,它会尽力而为,并为你提供它设法理解的位。

如果您想查看转换过程中是否有错误,则必须检查cin.fail()。

    while (!(cin >> num) || cin.get()!='\n') {
    ...

答案 1 :(得分:0)

您可以使用std::all_of来测试整个字符串是否为数字:

std::string str;
auto is_digit_check = [] (unsigned char c) { return std::isdigit(c); };
while (!(std::cin >> str) ||
       !std::all_of(str.begin(), str.end(), is_digit_check))
{
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

return std::stoi(str);