首页 > 解决方案 > 错误检查不是 int 的东西时,控制台被淹没

问题描述

我试图只允许整数值进入我的程序,所以我做了以下函数。该功能与我在网上看到的其他功能相似,我的似乎工作得很好,直到我添加一个!在它前面检查某些东西是否不是 int。

检查输入是否为整数的函数:

bool isInteger(std::string s)
{
    for (int i = 0; i < s.length(); i++)
    {
        if (isdigit(s[i]) == false)
        {
            return false;
        }

        return true;
    }
}

正在使用的功能:

int getLevel()
{
    int level;

    std::cout << "Level One\n";
    std::cout << "Level Two\n";
    std::cout << "Level Three\n";
    std::cout << "Level Four\n";
    std::cout << "Level Five\n";
    std::cout << "Enter your level (1-5): ";
    std::cin >> level;

    while (!isInteger(std::to_string(level)) || level < 1 || level > 5)
    {
        std::cout << "Enter an integer value between 1-5 inclusive: ";
        std::cin >> level;
    }

    clrscr();
    return level;;
}

我相信该功能可以正常工作,直到我放 ! 在它面前。我试图只允许整数输入到我的程序中,当我输入双精度或字符串时,控制台会充斥着消息“输入介于 1-5 之间的整数值:”并且没有时间输入输入。我对 c++ 编程相当陌生,可以使用一些建议。谢谢!

标签: c++integererror-checking

解决方案


感谢所有的回复和澄清,我已经设法提出了自己的解决方案。

新的 isInteger 函数现在检查所需的所有内容,包括用户上面建议的输入,如“0004”:

bool errorCheck(std::string s)
{
    int intLevel;
    std::stringstream tempLvl(s);
    tempLvl >> intLevel;

    for (int i = 0; i < s.length(); i++)
    {
        if (isdigit(s[i]) == false || s[0] == '0' || intLevel < 1 || intLevel > 5)
        {
            return false;
        }
    }
    return true;
}

实际操作方法:

    std::cout << "Enter your level (1-5): ";
    std::cin >> stringLevel;

    while (!errorCheck(stringLevel))
    {
        std::cout << "Enter an integer value between 1-5 inclusive: ";
        std::cin >> stringLevel;
    }

    std::stringstream lvl(stringLevel);
    lvl >> level;

    clrscr();
    return level;
}

如果您发现代码有任何问题或有任何更简单的解决方案,请告诉我。感谢所有的帮助!


推荐阅读