为什么在这两个测试用例中我的输出是错误的?

时间:2019-05-15 19:15:26

标签: c loops

我的两个测试用例18和20没有得到预期的输出。

我编写了一个代码,其中用户必须键入一个小于100的整数,并且应根据以下条件打印WeirdNot Weird: “如果n为奇数,则打印Weird”, “如果n为偶数并且在2到5的范围内,则打印Not Weird”, “如果n为偶数且在6到20的范围内,则打印Weird”, “如果n为偶数且大于20,则打印Not Weird”。运行测试用例分别为18和20的代码,在两种情况下都应打印Weird,但结果是Not Weird

int main()
{
    int i;
    scanf("%d",&i);
    if (i%2==0)
    {
        if(1<i<6)
        {
            printf("Not Weird");
        }
        else if(6<=i<=20)
        {
            printf("Weird");
        }
        else
        {
            printf("Not Weird");
        }
    }
    else
    {
        printf("Weird");
    }
return 0;
}

我尝试了其他测试用例,它们显示了预期的输出,但是问题仅在18和20时出现。请帮助我解决该错误。

2 个答案:

答案 0 :(得分:1)

C不支持这样的语句:

if(1<i<6)

您要

if( (1<i) && (i<6) )

翻译:

如果i is greater than 1 以及 i is less than 6,则...

答案 1 :(得分:1)

这不符合您的预期:

1<i<6

这被解析为两个单独的比较:

((1<i)<6)

这首先检查i是否小于1。其值为0或1。然后检查该值以查看其是否小于6。0和1均小于6,因此总是逃避为真的。

您反而想要:

(i < 1) && (i < 6)

6<=i<=20

也是如此