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

C输入验证-为什么在输入字母时返回0?

施海
2023-03-14

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

int readUserInput() {

  cout << "What is the answer?: " << endl;

  int answer;

  do {
    cin >> answer;
    if (!cin || answer < -10 || answer > 100) {
      cout << "Invalid Input!" << endl;
      cout << "What is the answer?: " << endl;
      cin.clear();
      cin.ignore();
    }
  } while(!cin || answer < -10 || answer > 100);
  return answer;
}

共有3个答案

怀德馨
2023-03-14

0作为答案的初始值返回

您可以使用cin。fail()检查输入是否有效。

int readUserInput() {

  cout << "What is the answer?: " << endl;

  int answer;

  do {
    cin >> answer;
    if (cin.fail() || !cin || answer < -10 || answer > 100) {
      cout << "Invalid Input!" << endl;
      cout << "What is the answer?: " << endl;
      cin.clear();
      cin.ignore();
    }
  } while(cin.fail() || !cin || answer < -10 || answer > 100);
  return answer;
}
权兴为
2023-03-14

问题是,这种类型输入的验证循环取决于std::cin的错误状态。但是,在循环检查错误状态之前,您清除了该错误状态。

解决此问题的最简单方法是将读数从std::cin移动到clear()之后,如下所示:

// Read first
cin >> answer;
do {

    if (!cin || answer < -10 || answer > 100) {
        cout << "Invalid Input!" << endl;
        cout << "What is the answer?: " << endl;
        cin.clear();
        cin.ignore();
        cin >> answer;
    }
} while(!cin || answer < -10 || answer > 100);

不过,我认为我更喜欢使用常规的而不是循环:

cin >> answer;

while(!cin || answer < -10 || answer > 100) {
    cout << "Invalid Input!" << endl;
    cout << "What is the answer?: " << endl;
    cin.clear();
    cin.ignore();
    cin >> answer;

}

我觉得这更干净,但那只是我。两个循环都会工作。

戈睿识
2023-03-14

如果你玩输入值,你会发现cin

例如,放置:

57gh5

返回57

如果只输入数字字符,则得分为0。

如果你说

 类似资料:
  • 有人能帮我完成输入验证功能吗。我正在验证整数输入。问题是当用户输入多个整数my cin时。fail()对每个整数运行,导致我的错误显示多次。让我告诉你我的意思 这是我的代码: 因此,如果用户要输入“jjj”;我的“请只输入整数”显示三次。我只想让它显示一次。我不知道怎么做。有什么想法吗?

  • 问题内容: 我有以下html5输入元素: 为什么此输入允许在输入字段中输入字符“ e”?没有其他字母字符可以输入(按预期方式) 使用chrome v.44.0.2403.107 问题答案: 因为这正是规范所说的应该工作的方式。输入的数字可以接受浮点数,包括负号和或字符(其中指数是或后面的数字): 浮点数按以下顺序由以下部分组成: 可选地,第一个字符可以是“ ”字符。 “ ” 范围内的一个或多个字符

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

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

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