此代码始终打印
罚款卢比。 1
尽管输入的天数为> 30
。是什么原因?
#include<stdio.h>
int main(void)
{
int days;
printf("enter no. of days");
scanf("%d",&days);
if (days<=5){printf("fine 50 paise");}
else if (5<days<=10){printf("fine Rs. 1");}
else if (10<days<30){printf("fine Rs.5");}
else printf(" memebership cancelled");
}
答案 0 :(得分:4)
更改
if (5<days<=10)
到
if (5<days && days <= 10)
其他人也一样。
否则,在您的代码中,条件检查的行为类似于
if ( (5 < days) <=10)
因此,无论您为days
[6
及更高版本输入的值,保留第一个if
,<
操作的结果将始终产生0
或1
,均为<= 10
,因此条件为TRUE,打印fine Rs. 1
。
相关阅读:C operator precedence。
注意:最好在return
的结束}
之前添加main()
语句
答案 1 :(得分:2)
C分段解析语句(例如if(5<days<=10)
),而不是试图从整体上解释它们。这意味着编译器将if(5<days<=10)
读为if((5<days)<=10)
。请注意,这意味着5<days
的结果与10
进行比较,而不是变量days
。要展开,任何比较运算符(<
,>
,==
等)的结果都是一个整数,表示它是真还是假(这称为boolean
值,值为true或false),分别为1或0。因此,假设5<days
为真,则下一个比较为1<=10
(如果天数小于5,则为0<=10
,当然这总是正确的。
要解决此问题,请使用比较运算符&&
(和)。 if(5 < days && days <= 10)
被解析为((5 < days) && (days <= 10))
,因此您首先将days
变量与5
和10
进行比较,然后将每个变量的真值都计算在内并查看5 < days
和 days <= 10
是否属实。
最后一点 - 0
始终为false,任何非零始终为true,因此if(0)
将始终为false,if(5)
将始终为true。
答案 2 :(得分:1)
由于第二个if条件,我不知道是否允许您按照您在代码中使用的方式使用条件:
if (5<days<=10)
将其编辑为
if(days > 5 && days <= 10)
它会起作用,也会相应地编辑第三个条件。
答案 3 :(得分:0)
if (5<days<=10)
的语法不正确
应该是
if(5<days && days<=10)
改变它,你的问题应该解决。 :)