2015-02-04 221 views
-6

这个代码总是打印错误代码

罚款卢比。 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"); 
} 
+1

正确地格式化你的代码,特别是缩进,会使它更容易阅读。 –

+4

添加一个有意义的标题也会有所帮助。 –

+0

我确定这是重复的(我已经回答了关于'x

回答

4

变化

if (5<days<=10) 

if (5<days && days <= 10) 

同样为其他(一个或多个)。

否则,在你的代码,健康检查的行为就像

if ((5 < days) <=10) 

所以,你输入的任何值days [6以上,牢记第一if]时,<操作的结果会始终生成01,均为<= 10,因此使条件TRUE,打印fine Rs. 1

相关阅读:C operator precedence

注:这是一个很好的做法main()

+0

不应该是'&&'? – Pankrates

+0

&&运算符是你在这里需要的,而不是||。 – Rob

+0

@Pankrates已更正。谢谢先生。 :-) –

1

收盘}前添加一个return声明这是由于第二if条件,我不,如果它被允许使用的条件,你所使用的方式知道你代码:

if (5<days<=10) 

编辑它

if(days > 5 && days <= 10) 

,它会工作,也可以编辑第三conditio因此。

2

C分析语句(如if(5<days<=10)),而不是试图从整体上解释它们。这意味着编译器将if(5<days<=10)设为if((5<days)<=10)。请注意,这意味着将结果5<days10进行比较,而不是变量days。要展开,任何比较运算符(<,>,==等)的结果都是表示它是true还是false的整数(这称为boolean值,值为true或false),分别为1或0 。因此,假设5<days为真,则下一个比较是1<=10(或者如果天小于5,则为0<=10),这当然总是如此。

要解决此问题,请使用比较运算符&&(和)。 if(5 < days && days <= 10)被解析为((5 < days) && (days <= 10)),所以你先正确的days变量与510,然后以每这些语句的真值,看是否5 < daysdays <= 10是真实的。

最后一点 - 0始终是假的,任何非零始终是真实的,所以if(0)将永远是假的,if(5)永远是正确的。

0
if (5<days<=10) 

是不正确的语法

的应该是

if(5<days && days<=10) 

改变它,你的问题应该得到解决。 :)