我在C中有以下代码:
int main() {
int num;
printf("Enter 1, 2 or 3:\n");
scanf("%d", &num);
while(num != 1 || num != 2 || num != 3) {
printf("Try again!\n");
scanf("%d", &num);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
无论我输入什么,while循环都不会退出.这段代码有什么问题?
当我输入num = 3时,while循环应该被评估为false并且不应该执行.但由于某种原因,它仍然存在.
你能告诉我我做错了什么吗?
谢谢!
你的while循环条件是错误的.您需要使用AND运算符&&
而不是OR运算符||
.当你使用OR运算符时,你会说这些条件是否为真,所以在这种情况下,如果输入不是1或者它不是2或者它不是3,那么你再次进入循环.这意味着输入必须同时等于1,2和3,这是不可能的,因此是无限循环.
我现在已经看过几次这个错误; 我认为这是因为人们习惯使用OR来表示"任何",如果ORed的条件没有被否定,那么它就有效.但是,当你使用带有否定条件的情况时!(x==2)
,它意味着所有条件(如x==2
)都必须为真.这是DeMorgan的法则,当你有这种形式的布尔表达式时:!x || !y || !z
它实际上相当于!(x && y && z)
,它的计算结果是仅当满足所有三个条件时才为假.