需要帮助理解循环

Tha*_*kis 3 c#

好吧,我想做的事情似乎相当简单,但它并没有按照我想要的方式工作.我知道我只是没有得到什么.本质上我试图读取控制台输入,将其分配给变量.然后我想检查该变量以查看它是否是有效数字.如果不是,我想告诉用户它无效并重新开始循环,直到我得到一个有效的数字,然后退出.这是我的代码,请你帮我理解我做错了什么?

    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);
Run Code Online (Sandbox Code Playgroud)

Ada*_*kis 16

=! 应该 !=

你正在进行任务,设置为false.以来:

while (done =! true);while (done = !true); 相同的while (done = false);

在每次迭代中,您将done指定为false,它本身的计算结果为false,这意味着您的循环将永远不会再次迭代.

将循环表达式更改为while (done != true); 或更好while (!done);


Yog*_*esh 6

错误在最后一行:

while (done =! true);
Run Code Online (Sandbox Code Playgroud)

你正在做的是分配done !true哪个是false这样的,无论done在该语句执行之前的值如何,它将转向false并且循环将退出.

你真正想要的是:

while (!done);
Run Code Online (Sandbox Code Playgroud)

此外,当您使用break突破循环时,您可以删除done使用变量的每一行,只需使用此行而不会出现任何问题:

while (true);
Run Code Online (Sandbox Code Playgroud)