while循环与||无法正常工作

Som*_*One 0 c while-loop

我在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并且不应该执行.但由于某种原因,它仍然存在.

你能告诉我我做错了什么吗?

谢谢!

dra*_*mzy 8

你的while循环条件是错误的.您需要使用AND运算符&&而不是OR运算符||.当你使用OR运算符时,你会说这些条件是否为真,所以在这种情况下,如果输入不是1或者它不是2或者它不是3,那么你再次进入循环.这意味着输入必须同时等于1,2和3,这是不可能的,因此是无限循环.

我现在已经看过几次这个错误; 我认为这是因为人们习惯使用OR来表示"任何",如果ORed的条件没有被否定,那么它就有效.但是,当你使用带有否定条件的情况时!(x==2),它意味着所有条件(如x==2)都必须为真.这是DeMorgan的法则,当你有这种形式的布尔表达式时:!x || !y || !z它实际上相当于!(x && y && z),它的计算结果是仅当满足所有三个条件时才为假.