提问人:Ansh 提问时间:9/24/2016 最后编辑:alkAnsh 更新时间:9/24/2016 访问量:1510
在多个条件下进行测试(C 语言)
Testing while for multiple conditions (C language)
问:
我必须创建一个菜单,如果输入无效。它应该不断要求提供有效的输入。我在下面写了它(用 C 语言)
#include <stdio.h>
int main()
{
int input = 0;
printf("What would you like to do? \n 1 (Subtraction) \n 2 (Comparison) \n 3 (Odd/Even) \n 4 (Exit) \n ");
scanf_s("%d", &input);
while (input != 1 || input != 2 || input != 3|| input != 4)
{
printf("Please enter a valid option \n");
scanf_s("%d", &input);
} // At this point, I think it should keep testing variable input and if it's not either 1 or 2 or 3 or 4. It would keep looping.
但实际情况是,即使输入为 2,它也会循环。
答:
2赞
eavidan
9/24/2016
#1
你所写的是,如果变量不是其中之一,你就循环。
你想要的是或while(input < 1 || 4 < input)
while(input != 1 && input != 2 && input != 3 && input != 4)
评论
0赞
Ansh
9/24/2016
我的输入永远不会是 1 和 2 以及 3 和 4。这将是其中之一。所以也不会有意义吗?
1赞
eavidan
9/24/2016
例如,如果输入 2,则计算结果为 true,因为输入 != 1 为 true。但是,如果您使用我的示例,您会看到它的计算结果为 false,因为即使输入 != 1 为 true,因为输入 != 2 的 AND。您应该在IDE中针对某些输入运行它,也许这将有助于您更好地理解问题
0赞
M.M
9/24/2016
@Ansh您希望所有条件同时为真:与所有选项不同input
3赞
alk
9/24/2016
#2
你的代码是说:只要满足以下条件,就循环:
(input != 1 || input != 2 || input != 3 || input != 4)
把这个转过来,代码说:如果上述条件是假的,则断开循环,这对于
!(input != 1 || input != 2 || input != 3 || input != 4)
现在让我们将德摩根定律应用于上面的表达式,我们将得到逻辑相等表达式(作为循环的中断条件):
(input == 1 && input == 2 && input == 3 && input == 4)
如果上述情况为真,则循环将中断。如果等于 和 和 和 同时,则为真。这是不可能的,因此循环将永远运行。input
1
2
3
4
但实际情况是,即使输入为 2,它也会循环。
如果 是 ,它仍然不相等,并且 ,这使得循环条件变为真,循环继续进行。:-)input
2
1
3
4
与您的问题无关:
由于您希望循环的代码至少执行一次,因此您应该使用 -loop。do {...} while
do
{
printf("Please enter a valid option \n");
scanf_s("%d", &input);
} while (!(input == 1 || input == 2 || input == 3 || input == 4))
或(再次关注德摩根):
do
{
printf("Please enter a valid option \n");
scanf_s("%d", &input);
} while (input != 1 && input != 2 && input != 3 && input != 4)
甚至更紧:
do
{
printf("Please enter a valid option \n");
scanf_s("%d", &input);
} while (input < 1 || input > 4)
评论
1赞
Vucko
9/24/2016
我喜欢德摩根定律的用法!这是一个很好的解释。
0赞
Ansh
9/24/2016
@alk你的第一个 do while 代码说 while input not equal to 1 and 2 and 3 and 4.做点什么。这意味着即使我输入 3,do 部分也会被执行。因为它不等于 3 和 4,对吧?
0赞
Ansh
9/24/2016
@alk 我觉得那一点点!In the While 语句是问题的解决方案。我会测试一下,看看。范克布鲁。
0赞
alk
9/24/2016
@Ansh:这不仅仅是你的代码形式不同。请多看两遍。!
0赞
Ansh
9/24/2016
@alk仅供参考,您在 C 中的第一个 do while 是错误的。你的第二个代码可以工作,但它确实是第一......只是需要一点调整..像魅力母鹿一样工作。升级!
评论
true
||
&&
input != 2
false
input != 1
true
true || false
true
true