2015-02-04 193 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) 

改變它,你的問題應該得到解決。 :)