当前位置: 首页 > 知识库问答 >
问题:

C输入验证

田博易
2023-03-14

有人能帮我完成输入验证功能吗。我正在验证整数输入。问题是当用户输入多个整数my cin时。fail()对每个整数运行,导致我的错误显示多次。让我告诉你我的意思

这是我的代码:

#include <iostream>
//#include "Uni.hpp"
#include <string>

using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::getline;

int main()
{

bool repeat;
int choice; 
repeat = false;

//Give user options     
cout << "Enter 1:   Print building information" << endl;
cout << "Enter 2:   Print people information" << endl;
cout << "Enter 3:   Assign work to a Student or instructor." << endl;
cout << "Enter 4:   Exit program." << endl;
cin >> choice;



//First check for correct data type integers only in this case 
while (cin.fail())
{
    cout << "Enter only an integer please. Try again." << std::endl;
    cin.clear();
    cin.ignore();
    cin >> choice;
}

//run program until user exits
while (choice != 4)
{
    if (choice == 1)
    {
        cout << "Print building info" << endl;
    }

    if (choice == 2)
    {
        cout << "Print people info" << endl;
    }

    if (choice == 3)
    {
        cout << "Assign work" << endl;
    }

    if (choice > 4)
    {
        cout << "Not a valid choice. Choose " << endl;
    }

    cout << endl;
    cout << endl;
    //give options again 
    cout << "Enter 1:   Print building information" << endl;
    cout << "Enter 2:   Print people information" << endl;
    cout << "Enter 3:   Assign work to a Student or instructor." << endl;
    cout << "Enter 4:   Exit program." << endl;
    cin >> choice;

    //data type validation
    while (cin.fail())
    {
        cout << "Enter only an integer please." << endl;
        cin.clear();
        cin.ignore();
        cin >> choice;
    }

因此,如果用户要输入“jjj”;我的“请只输入整数”显示三次。我只想让它显示一次。我不知道怎么做。有什么想法吗?

共有1个答案

万俟华辉
2023-03-14

首先测试cin.fail,打印一次消息,然后处理并清除循环中的字符。这将解释例如,人们键入“bbb”,这将触发循环中的三次运行,但它只会给你一次消息:

    if (cin.fail())
    {
        cout << "Enter only an integer please." << endl;
    }
    //data type validation
    while (cin.fail())
    {
        cin.clear();
        cin.ignore();
        cin >> choice;
    }

您还可以将指令/输入验证代码移动到while循环的顶部,然后您不需要在while循环之外重复它

 类似资料:
  • 根据经验,您永远不应该信任从最终用户收到的数据, 并且应该在充分利用之前对其进行验证。 要给 model 填充其所需的用户输入数据,你可以调用 yii\base\Model::validate() 方法验证它们。该方法会返回一个布尔值,指明是否通过验证。若没有通过,你能通过 yii\base\Model::$errors 属性获取相应的报错信息。比如, $model = new \app\mode

  • 我正在做一个Windows Phone8.1项目。在XAML中,我有两个文本框,一个代表名字,另一个代表最后一个,还有一个按钮。在button click事件中,如果textbox中的任一个(或两个)为/为空,我希望显示一条消息,表示“blah blah blah blah”。 我试了很多方法,但都没能得到这个。这是我能得到的最好的,但它在某种程度上不起作用: 使用DataContext,我会得到

  • 我目前设置了一个函数,该函数要求用户输入一个int,获取该int,然后检查以确保输入符合特定规范。在这种情况下,输入应该是一个介于-10和100之间的整数。现在,如果我输入任何字母字符串,例如“gfUIWYDUF”,函数将返回0。为什么会发生这种情况,我该如何解决?

  • 问题内容: 我是这个C ++世界的新手,正在尝试为数字密码编写输入验证功能。这是我到目前为止所得到的: 对于不正确的值,它工作得很好,但在有效输入时不会中断循环。知道我在这里缺少什么吗?干杯!! James Kanze脚本的ErroR: 新代码: 使用 和 验证作为字符串 感谢所有人(尤其是James Kanze)的帮助。这件事在这里很有效。 那里还有进一步改进的空间吗?干杯!! 问题答案: 这看

  • 主要内容:输入验证,应用代码,实例解析AngularJS 表单和控件可以验证输入的数据。 输入验证 在前面的几个章节中,你已经学到关于 AngularJS 表单和控件的知识。 AngularJS 表单和控件可以提供验证功能,并对用户输入的非法数据进行警告。 客户端的验证不能确保用户输入数据的安全,所以服务端的数据验证也是必须的。 应用代码 < !DOCTYPE html > < html > < script src= "http:/