我在幾個方面重寫這個循環中,嵌套如果和做田地,但行爲是相同的。只要用戶沒有輸入字符或字符串,它就會像預期的那樣工作。一旦用戶做了它,只是繼續旋轉循環,直到我CTRL + C它。While循環還沒有結束
從我的研究,當一個變量是一個號碼,用戶輸入一個字符或字符串,他們只是被轉換成他們的ASCII碼,在這種情況下,同時檢查應該工作。該數字應該大於允許值,並且應該提示用戶輸入新的數值。爲什麼它會無限循環?
寬度被聲明爲浮點數。
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之間,但爲什麼它不會要求用戶輸入?我確實清除了緩衝區。
讀到字符串,然後轉換爲數字(並驗證它是否可以)... – dbrank0
'width'的數據類型是什麼? – Srinivas
寬度的初始值是什麼? – billz