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