繁体   English   中英

在用户输入C ++中仅接受数字

[英]Accepting only numbers in the user input 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作为输入或以数字开头但具有字符串的任何其他输入?

如果给它一个部分数字,则默认情况下,它将尽力而为,并为您提供它确实能够理解的位。

如果要查看转换期间是否有错误,则必须检查cin.fail()。

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

您可以使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM