好的我想要做的事情似乎相当简单,但它并没有按照我想要的方式工作。我知道我只是没有得到什么。本质上我试图读取控制台输入,将其分配给变量。然后我想检查该变量以查看它是否是有效数字。如果不是,我想告诉用户它无效并重新开始循环,直到我得到一个有效的数字,然后退出。这是我的代码,请你帮我理解我做错了什么?
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);
答案 0 :(得分:16)
=!
应为!=
您正在执行任务,设置为false。从那以后:
while (done =! true);
与while (done = !true);
相同,与while (done = false);
在每次迭代中,您将done指定为false,它本身的计算结果为false,这意味着您的循环将永远不会再次迭代。
将循环表达式更改为while (done != true);
或更好while (!done);
答案 1 :(得分:6)
错误在最后一行:
while (done =! true);
您正在做的是分配done
!true
false
,因此无论done
执行此语句之前的值是什么,它都将转为{{1}并且循环将退出。
你真正想要的是:
false
此外,当您使用while (!done);
突破循环时,您可以删除使用break
变量的每一行,只需使用此行而不会出现任何问题:
done
答案 2 :(得分:4)
done =! true
应更改为done != true
答案 3 :(得分:3)
正如xanatos所说。但是,你的休息与完成标志有一个风格问题。 break的替代方法是保持done标志 - 并删除break语句。你的时间会变成一样(!完成);
答案 4 :(得分:2)
检查IQ < 0
将>=
更改为>
,将<=
更改为<
删除所有done
并将while
更改为while (true)
答案 5 :(得分:0)
一些注意事项:
else if (userIQ >= AVERAGE_IQ)
更改为else if (userIQ > AVERAGE_IQ)
因为您拥有最后一个“如果他们是平等的”break;
退出循环,因此您无需设置done=true
答案 6 :(得分:0)
“你不按我想要的方式工作”是什么意思?是不是正确地提示用户输入?是否显示错误信息?它是否会抛出异常?
乍一看,我已经看到了一个错误。您检查&gt; = AVERAGE_IQ然后&lt; = AVERAGE_IQ然后== AVERAGE_IQ。如果用户输入AVERAGE_IQ,则第一个条件会命中,并且它会说它高于平均IQ。 &gt; =和&lt; =应该是&gt;和&lt;代替。此外,由于您正在破坏,因此完成标志是多余的。如果您打算使用休息时间,也可以使用while(true)循环。
另一方面,您没有正确处理负输入。它还应显示超出范围的错误消息。
编辑:正如许多其他人所指出的那样,“=!”和“!=”不一样。
答案 7 :(得分:0)
循环用于处理让用户输入正确的输入。评估该输入超出适当范围应该移动到其他地方。
如果您将代码重构为类似的内容,则更清楚您要执行的操作。
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.