このループは、ネストされた 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 の間ではないためですが、ユーザーに入力を求めないのはなぜですか? バッファをクリアします。