我用几种方法重写了这个循环,使用嵌套的 If 和 do while,但行为是相同的。只要用户不输入字符或字符串,它就会按预期运行。一旦用户这样做,它就会继续旋转循环,直到我 CTRL+C 它。
根据我的研究,当一个变量是一个数字并且用户输入一个字符或字符串时,他们只是被转换成他们的 ASCII 数字,在这种情况下,while 检查应该起作用。该数字应该大于允许的值,并且应该提示用户输入新值,对吗?为什么它会无限循环?
宽度被声明为浮点数。
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 之间,但为什么它不要求用户输入?我确实清除了缓冲区。