微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

While 条件:如何允许比较非整数/双用户输入和整数限制

如何解决While 条件:如何允许比较非整数/双用户输入和整数限制

目标:运行 while 循环,该循环将重复直到用户输入 1-3(含)之间的整数。因此,如果输入一个小于 1 或大于 3 的整数或输入任何字符或字符串,则循环重复。

我的菜鸟知识:当用户输入是整数时,我知道如何比较用户输入,但是当它是字符或字符串数​​据类型输入时,我得到的只是一个无限循环。另外,我将 inputtable 变量声明为整数,所以不知道如何继续。

我在 Google 上进行了一些搜索,但似乎找不到与我的问题相似的问题。
高度赞赏的建议:)

代码如下:

int Decision1 = 4;

while ( Decision1 < 1 || Decision > 3)
      {
        std::cout << "Enter answer here: ";
        std::cin >> Decision1;
        std::cout << "\n\n";
      }

解决方法

int Decision1;
while(std::cin >> Decision1) {
   if(Decision1 >= 1 && Decision1 <= 3) break;
   // todo
}
,

您可以使用 ASCII 码来检查数字或字符。

    #include <iostream>

int main() {
  char Decision1 = '0';

while (  (Decision1 < 49 && Decision1 >=47) ||  (Decision1 >51 && Decision1 <=57 ))
      {
        std::cout << "Enter answer here: ";
        std::cin >> Decision1;
        std::cout << Decision1;
        std::cout << "\n";
      }
}

希望对你有帮助。

,

请记住:当您阅读来自 std::cin 的输入时,您正在阅读在控制台输入的文本。流提取器尝试将该文本转换为目标类型。也就是说,在

int i;
std::cin >> i;

>> 运算符查找数字字符并计算出这些字符代表的值。如果字符无法转换为整数值,则提取失败。流具有到 bool 的转换,它告诉您流是否处于良好状态,或者尝试的操作是否失败。所以:

int i;
if (std::cin >> i)
    std::cout << "got a value!\n";

要编写一个提示输入有效的循环,您需要反转测试:

int i;
while (!(std::cin >> i) {
    std::cout << "bad input\n":
    // now clear the input stream,so it's back in a good state
}

检查该值是否在所需范围内,只需执行以下操作:

int i;
while (!(std::cin >> i) || i < 1 || i > 3) {
    std::cout << "bad input\n":
    // now clear the input stream,so it's back in a good state
}

要清除输入流,您必须重置其内部标志。你用 std::cin.clear(); 做到这一点。而且,根据您认为输入的内容,您可能希望删除用户输入的任何其他字符。你用 std::cin::ignore(std::numeric_limits<std::streamsize>::max(),'\n') 做到这一点。这告诉流丢弃字符,直到它到达换行符(按 ENTER),或者直到它读取了大量字符。

综合起来:

int i;
while (!(std::cin >> i) || i < 1 || i > 3) {
    std::cout << "bad input\n":
    std::cin.clear();
    std::cin::ignore(std::numeric_limits<std::streamsize>::max(),'\n');
}

是的,当输入是有效整数但超出范围时,这会清除流状态并刷新输入;那是无害的。这是浪费时间,但键盘输入的速度受用户键入速度的限制,这比此循环中的代码执行的任何操作慢得多

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。