我用嵌套的 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/