首页 > 解决方案 > 当程序要求输入数字时,防止用户输入字母的最简单方法是什么?

问题描述

假设我有一个名为“varFloat”的浮点变量,并且我使用 cin 允许用户输入数字,如何防止用户输入字母?

我有一个计算器程序,如果输入的是字母而不是数字,它就会中断。

        cout << "Enter num1: ";
        cin >> num1;
        cin.ignore(); 

        do
        {
            //Select function
            cout << "Enter a function ('+' '-' '*' '/'):";
            getline(cin, function);

            if (function == "+" || function == "-" || function == "*" || function == "/")
            {
                break;
            }
            else
            {
                cout << function << " IS AN INVALID FUNCTION" << endl;
            }
        } while (function != "+" || function != "-" || function != "*" || function != "/");

如果为 num1 输入了一个字母,程序似乎会跳过 getline 并无休止地打印“IS AN INVALID FUNCTION”。

标签: stringfloating-pointintcin

解决方案


如何防止用户输入字母?

代码不能。当尝试进入时,没有魔法手臂可以拍打用户的手A

相反,形成一个辅助函数,而不是简单地cin >> num1;,接受一行输入,解析它的正确性并报告结果。有 3 个结果:输入可接受,输入不可接受但cin仍处于打开状态,输入不可接受且cin已关闭。

cin也许扩展辅助函数以丢弃不可接受的输入并在仍然打开时重新提示。

对于float,我在 C 中使用诸如此类的代码来执行此操作,该代码用于解析strtof()并提供解析结束位置。


推荐阅读