簡體   English   中英

需要幫助理解循環

[英]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語句。 你的時間會變成一會兒(!完成);

  1. 檢查IQ < 0

  2. >=更改為><=更改為<

  3. 刪除所有已done並將while更改為while (true)

幾點說明:

  1. else if (userIQ >= AVERAGE_IQ)更改為else if (userIQ > AVERAGE_IQ)因為你有最后一個“如果它們相等”
  2. 因為你使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM