C 使用| | vs.amp;时do中的条件&;

C 使用| | vs.amp;时do中的条件&;,c,loops,conditional-statements,nested-loops,do-while,C,Loops,Conditional Statements,Nested Loops,Do While,您希望在输入低于1或输入大于50时循环 如果使用and,条件将永远不会为真,因为输入不能小于1且大于50。因为|和&&的含义不同 | |是逻辑OR运算符,因此它在那里非常有意义,因为只有当输入是而不是符合您的规范时,才再次运行循环。错误的输入是userInput为50的输入。这两种情况下都是错误的,但只有一种情况就足以使其出错,因此使用OR。vaue不能同时为50,因此AND运算符(&&)总是返回false 如果要使用&&表示“仅当数字不在1和50之间时才再次运行循环”,则必须将比较更改为:

您希望在输入低于1或输入大于50时循环


如果使用and,条件将永远不会为真,因为输入不能小于1且大于50。

因为
|
&&
的含义不同

| |
是逻辑OR运算符,因此它在那里非常有意义,因为只有当输入是而不是符合您的规范时,才再次运行循环。错误的输入是userInput为50的输入。这两种情况下都是错误的,但只有一种情况就足以使其出错,因此使用OR。vaue不能同时为50,因此AND运算符(
&&
)总是返回false

如果要使用
&&
表示“仅当数字不在1和50之间时才再次运行循环”,则必须将比较更改为:


  • while(!(userInput>=1&&userInput谢谢Matthieu!哦,我看到它不能同时小于和大于,因此它不会听我需要的是保持在1和50之间。因此,使用| |循环将允许程序仅在设定范围之间运行,但&&将允许所有数字忽略范围。可能是我的英语,whi即使当我写“介于1和50之间”时,ch也不合适,我只是假设&会起作用。是的,但是循环是在它不在1和50之间的时候。这是用OR运算符解决的。布尔代数。注意,
    是逻辑not,但也有
    ~
    表示按位not。
    main()
    {
        int x, y, userInput;
        do {
            {   printf("Input a number: \n");
            scanf("%i", &userInput);
            }
        } while (userInput < 1 || userInput > 50);
    
    for (x = 1; x <= userInput; x++) {
            for (y = 1; y <= x; y++) {
                printf("*");
            }
            printf("\n");
        }
        PAUSE;
    }