c++ - while 循环没有结束

标签 c++ while-loop

我用嵌套的 If 和 do while 以多种方式重写了这个循环,但行为是相同的。只要用户不输入字符或字符串,它就会按预期运行。一旦用户这样做,它就会继续旋转循环,直到我 CTRL+C 为止。

根据我的研究,当一个变量是一个数字并且用户输入一个字符或一个字符串时,他们只是被转换成他们的 ASCII 数字,在这种情况下 while 检查应该起作用。该数字应该大于允许的值,并且应该提示用户输入一个新值,对吧?为什么会无限循环?

宽度被声明为 float 。

void setWidth ()
{
    std::cout << "\nPlease enter the width (use numbers greater than 0 and no greater than 20.0).\n";
    std::cin >> width;
    while (width <= 0 || width > 20)
    {
        std::cin.clear();
        std::cin.ignore();
        std::cout << "You have entered a number outside of the allowed range.\nPlease enter a number greater than 0 and no greater than 20.\n";
        std::cin >> width;
    }
}

就像我说的,对于数字,它非常有用,双倍,负数,等等。但是像“asdf”或“a”之类的东西会把它放在无限旋转的循环中。

看来我什么都试过了。为什么会这样?我的意思是我知道它为什么循环,这是因为数字不在 0 到 20 之间,但为什么它不要求用户输入?我确实清除了缓冲区。

最佳答案

std::cin >> width; 行失败,因为输入不是数字。它也不消耗任何输入,因此您陷入了无限循环。

为避免这种情况,您应该使用 std::getline() 读取输入,然后尝试转换它(std::ostringstream 是一种选择),相应地处理和报告失败。

关于c++ - while 循环没有结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217592/

相关文章:

c++ - 确定参数的数量和类型以及作为函数的类型参数的返回类型

powershell - 在 Powershell 中导入 CSV ,每 10 行分成多个文件

c++ -\r在linux系统上的含义

c++ - 析构函数崩溃

使用 while 的 C 程序 - 如果 counter>8 则出现奇怪的计数器错误

Php 一会儿

c - 在 while 循环中扫描字符

c - 使用 while 循环进行字母移位

c++方法有时会返回意外的高值

c++ - C 明显比 C++ 快吗