【问题标题】:Why is my output wrong at these two test cases? [duplicate]为什么我的输出在这两个测试用例中是错误的? [复制]
【发布时间】:2019-10-03 00:06:46
【问题描述】:

我的两个测试用例 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 中。请帮助我解决错误。

【问题讨论】:

  • 1&lt;i&lt;66&lt;=i&lt;=20 不会像您认为的那样做
  • 你确定这个if(1&lt;i&lt;6) 做了什么吗? i&lt;6 将是 01 所以 1 永远不会少于那个。
  • 太多的python让你认为C也有操作符链,但它没有:)
  • @Jean-FrançoisFabre 或者数学太多
  • 这就是 python 非常棒的地方,因为这种操作符链接功能非常直观(有时也会在 python 中引起灾难)

标签: c loops


【解决方案1】:

这并不像你认为的那样:

1<i<6

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

((1<i)<6)

首先检查 i 是否小于 1。它的计算结果为 0 或 1。然后检查该值是否小于 6。0 和 1 都小于 6,因此总是计算为真。

你想要:

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

同样适用于6&lt;=i&lt;=20

【讨论】:

    【解决方案2】:

    C 不支持这样的语句:

    if(1<i<6)
    

    你想要:

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

    翻译:

    如果i is greater than 1还有 i is less than 6,那么...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      相关资源
      最近更新 更多