这只是一个普遍的问题。
我最初写的是
do
{
scanf("%i", &Carselect);
if (Carselect == 1)
{
mass = 1100;
velomax = 200;
}
else if (Carselect == 2)
{
mass = 1888;
velomax = 415
}
else if (Carselect == 3)
{
mass = 18000;
velomax = 129;
}
else
{
printf("Error in input. Please enter 1, 2 or 3.\n");
}
}
while (Carselect != 1 || Carselect != 2 || Carselect != 3);
我陷入了困境。我在有效条件的陈述中加入了休息,这使我能够离开,就像这样
do
{
scanf("%i", &Carselect);
if (Carselect == 1)
{
mass = 1100;
velomax = 200;
break;
}
else if (Carselect == 2)
{
mass = 1888;
velomax = 415;
break;
}
else if (Carselect == 3)
{
mass = 18000;
velomax = 129;
break;
}
else
{
printf("Error in input. Please enter 1, 2 or 3.\n");
}
}
while (Carselect != 1 || Carselect != 2 || Carselect != 3);
但我认为while的条件是重复条件,所以一旦Carselect等于1,2或3,它就会退出循环。如果你必须在if语句中放置中断,为什么我们需要在while操作中烦恼?
在机器级别或其他方面,有什么需要这个看似微不足道的逻辑?
答案 0 :(得分:6)
编辑(问题标题已更改):
while / do-while循环中的检查条件是主要检查以确定程序是否要保持或退出while / do-while循环而不是break语句。
如果出现以下情况,通常会使用break语句:
基本上,只要程序遵循(缺少更好的术语)“标准/主要”路径,break-statement通常用于 来终止while / do-while块在循环块中。
相反,while / do-while循环中的条件 用于在程序跟随“标准/主要时终止循环“循环块中的路径。
<强>原始强>
您应该将不等式检查(!=
)更改为NOT
等式检查(==
)。
while (!(Carselect == 1 || Carselect == 2 || Carselect == 3));
这是因为你真正想要的是循环继续只要
Carselect不是(1或2或3)
或者,您可以将或运算符(||
)更改为运算符(&&
),这会产生相同的逻辑:
while (Carselect != 1 && Carselect != 2 && Carselect != 3);
Carselect不是1而不是2而不是3
答案 1 :(得分:0)
在C 中断会将您带到包含块的紧跟在}}之后的语句,并且继续会将您带到紧跟在包含块之后的语句。两者在长块中都很有用,例如,如果出现错误情况,或者检测到更简单的输入,并且不需要完整块的所有处理,但是您希望继续并获得下一个输入。