为什么&&运算符充当||在这段c代码中,反之亦然?

问题描述 投票:0回答:1

我正在编写一个程序,以良好的格式打印两位数字的所有可能的不同组合:

  • 数字必须用逗号分隔,后跟空格(最后一位数字除外),后面不应跟逗号
  • 两个数字必须不同 在编写代码时,我认为要打印出所需的输出,它必须使用两个必须同时为 true 的 if 语句,因此我很自然地使用了“&&”运算符,但这给出了不同的结果,所以我尝试了“|” |”它起作用了。 我只是想知道这里是什么以及它们如何与“!”一起使用运营商如果这就是导致问题的原因。

当我使用 && 运算符时,这是输出(这不是所需的输出):

01, 02, 03, 04, 05, 06, 07, 08, 0912, 13, 14, 15, 16, 17, 18, 1923, 24, 25, 26, 27, 28, 2934, 35, 36, 37 , 38, 3945, 46, 47, 48, 4956, 57, 58, 5967, 68, 6978, 7989

当我使用“||”时运算符我给了我这个输出(这是所需的输出):

01, 02, 03, 04, 05, 06, 07, 08, 09, 12, 13, 14, 15, 16, 17, 18, 19, 23, 24, 25, 26, 27, 28, 29, 34 , 35, 36, 37, 38, 39, 45, 46, 47, 48, 49, 56, 57, 58, 59, 67, 68, 69, 78, 79, 89

这是代码,if语句在第16行

#include <stdio.h>

int main(void)
{
    int i;
    int j;

    for (i = 0; i < 10; i++)
    {
        for (j = 1; j < 10; j++)
        {
            if ( !(i >= j) )
            {
                putchar(i + 48);
                putchar(j + 48);
                if (i != 8 || j != 9)
                {
                    putchar(',');
                    putchar(' ');
                }
                
            }
        }
        
        
    }
    
   


    return (0);
}
c conditional-statements operators
1个回答
0
投票

您想要打印

, 
,除非两个循环都处于最后一次迭代。这相当于说任一循环是否不在其最后一次迭代中,这就是您正在测试的内容。

考虑

if (!(i == 8 && j == 9))

if (i != 8 || j != 9)

最终以不同的方式测试同一件事

© www.soinside.com 2019 - 2024. All rights reserved.