[英]Need help understanding loops
好吧,我想做的事情似乎相當簡單,但它並沒有按照我想要的方式工作。 我知道我只是沒有得到什么。 本質上我試圖讀取控制台輸入,將其分配給變量。 然后我想檢查該變量以查看它是否是有效數字。 如果不是,我想告訴用戶它無效並重新開始循環,直到我得到一個有效的數字,然后退出。 這是我的代碼,請你幫我理解我做錯了什么?
const int AVERAGE_IQ = 100;
int userIQ;
bool done = false;
do
{
Console.Write("Please enter an IQ Score between 1 and 200: ");
userIQ = Convert.ToInt32(Console.ReadLine());
if (userIQ == 0 || userIQ >= 200)
{
Console.WriteLine("You have entered an invalid IQ Score, please try again.");
done = false;
}
else if (userIQ >= AVERAGE_IQ)
{
Console.WriteLine("{0} is an above average IQ.", userIQ);
done = true;
break;
}
else if (userIQ <= AVERAGE_IQ)
{
Console.WriteLine("{0} is an below average IQ.", userIQ);
done = true;
break;
}
else if (userIQ == AVERAGE_IQ)
{
Console.WriteLine("{0} is anaverage IQ.", userIQ);
done = true;
break;
}
} while (done =! true);
=!
應該!=
你正在進行任務,設置為false。 以來:
while (done =! true);
與while (done = !true);
這與while (done = false);
在每次迭代中,您將done指定為false,其自身的計算結果為false,這意味着您的循環將永遠不會再次迭代。
將循環表達式更改為while (done != true);
(或者更好while (!done);
錯誤在最后一行:
while (done =! true);
你正在做的是分配done
!true
,這是false
所以不管在執行這個語句之前done
的值,它將變為false
並且循環將退出。
你真正想要的是:
while (!done);
此外,當您使用break
來突破循環時,您可以刪除使用done
變量的每一行,只需使用此行而不會出現任何問題:
while (true);
done =! true
done =! true
應該在done != true
更改為done != true
正如xanatos所說。 但是,你的休息與完成標志有一個風格問題。 break的替代方法是保持done標志 - 並刪除break語句。 你的時間會變成一會兒(!完成);
檢查IQ < 0
將>=
更改為>
, <=
更改為<
刪除所有已done
並將while
更改為while (true)
幾點說明:
else if (userIQ >= AVERAGE_IQ)
更改為else if (userIQ > AVERAGE_IQ)
因為你有最后一個“如果它們相等” break;
要退出循環,您不需要設置done=true
“你不按我想要的方式工作”是什么意思? 是不是正確地提示用戶輸入? 是否顯示錯誤信息? 這是一個例外嗎?
乍一看,我已經看到了一個錯誤。 檢查> = AVERAGE_IQ然后<= AVERAGE_IQ然后== AVERAGE_IQ。 如果用戶輸入AVERAGE_IQ,則第一個條件會命中,並且它會說它高於平均IQ。 > =和<=應該是>和<而不是。
此外,完成標志是多余的,因為您正在破壞。 如果你打算使用休息時間,你也可以使用while(true)循環。
另一件事,你沒有正確處理負輸入。 它還應顯示超出范圍的錯誤消息。
編輯:正如許多其他人所指出的那樣,“=!” 和“!=”不是一回事。
循環用於處理讓用戶輸入正確的輸入。 評估輸入超出適當范圍應該移動到其他地方。
如果您將代碼重構為類似的內容,則更清楚您要執行的操作。
int minIQ = 1;
int maxIQ = 200;
do
{
Console.Write("Please enter an IQ Score between " + minIQ + " and " + maxIQ + ": ");
userIQ = Convert.ToInt32(Console.ReadLine());
} while (userIQ >= minIQ && userIQ <= maxIQ);
//Test userIQ and output here.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.