C++检查整数变量

标签 c++ validation loops integer

用户输入日期,目前已验证以确保该值介于 1 和 31 之间(含)。

但是,如果他们输入一个非整数值,它只会在无限循环中不断重复错误消息。

我四处寻找答案,但其他提出问题的人似乎在 C++ 方面比我高级得多,因此我什至不理解他们的初始代码。

这是代码

void Menu::setDate()
{
    date = 0;

    std::cout << "Please enter todays date: (as an integer) ";
    do
    {
        std::cin >> date;   
        if (date > 0 && date < 32)
        {
            break;
        }
        std::cout << "Error: Please enter todays date: (as an integer) ";
    }
    while (true);
 }

最佳答案

您的代码的问题是当输入无效整数时,流会出错并设置为 failbit。因此,您需要先清除它,然后才能再次使用 I/O 操作。试试这个:

void Menu::setDate()
{
    date = 0;

    std::cout << "Please enter todays date: (as an integer) ";

    while(true){
        std::cin >> date;
        if(date > 0 && date < 32){
            break;
        }
        else{
            std::cout << "Error, please enter today's date (as an integer):" << std::endl;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
    }
 }

关于C++检查整数变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20976439/

相关文章:

c++ - 在模板参数中将枚举转换为 int

c++ - 尝试通过 using-declaration 定义命名空间成员

c++ - 在结构中排序和验证日期 (YYMMDD)

php - 使用PHP的动态输入字段的错误消息

vba - 奇怪的VBA(错误?)-复制粘贴循环崩溃,除非添加了消息框

Python 如何在 FOR-LOOP 回归中计算和存储残差

c++ - 这两个 typedef 之间有什么区别?

c++ - 赋值运算符 '=' 是原子的吗?

java - 验证Java中的代码格式

java - 用于将字符串添加到数组中的数组循环类不起作用