我的两个测试用例18和20没有得到预期的输出。
我编写了一个代码,其中用户必须键入一个小于100的整数,并且应根据以下条件打印Weird
或Not 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时出现。请帮助我解决该错误。
答案 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