2014-01-09 20 views
0

我有一個類,我需要驗證一些用戶輸入並根據輸入輸出不同的結果。非常基本的東西,但我是C品牌的新手,所以這就是我開始的地方。我以爲我是在正確的軌道上,但無論什麼整數I輸入,終端打印Good job!這裏是我的代碼:C條件語句中的不需要的輸出

C現在

printf("How tall should the pyramid be?\n"); 
int n = GetInt(); 
if (3 <= n < 23) 
{ 
    printf("Good job!\n"); 
} 
else if (0 < n <= 3) 
{ 
    printf("Well, that's not very impressive is it?\n"); 
} 
else 
{ 
    printf("Please enter a valid number between 1 and 23.\n"); 
} 

,我使用C零經驗,但我知道一些Python如果我是翻譯上面的代碼,它按預期工作:

的Python

n = input("Enter Number") 
if (3 <= n < 23): 
    print("Good job!\n") 
elif (0 < n <= 3): 
    print("Well, that's not very impressive is it?\n") 
else: 
    print("Please enter a valid number between 1 and 23.\n") 

爲什麼這個結構在Python中工作而不是C?我應該改變什麼,以便我的C代碼能打印正確的字符串?

+0

@JonathanLeffler我可以看到這個已經成爲常見的問題,你的觀點是什麼。對於重複的道歉,我在搜索中太模糊了。 –

+1

這將是很難搜索的... –

回答

4

3 <= n < 23不工作,你覺得它在C.一的方式,n3比較,然後轉換爲整數,產生1如果真或0如果假的。然後將0(或1)與23進行比較,總是產生真實(兩者都小於23)。

將其改寫爲3 <= n && n < 23。同樣適用於其他測試。

+0

啊!這就說得通了。所有三個答案都是一樣的,但你先偷偷溜進那裏,等10分鐘後,我會接受你的答案。謝謝! –

4
3 <= n < 23 

不會做你認爲它
它會做(3 < = N),這將評估的東西(0或1的真值可能?),然後比較,爲23

你想

3 <= n && n < 23 

同樣0 < n <= 3成爲0 < n && n <= 3

1

在C中,3 <= n < 23將評估爲truefalse。這不是檢查數字範圍的條件(與Python不同)。改變

if (3 <= n < 23) 

if (3 <= n && n < 23) 

else if (0 < n <= 3) 

else if (0 < n && n <= 3) 
0
= N < 23是一樣的寫入(3 < = N)< 23。第一部分如果爲true則返回1,否則返回0,將比較結果轉換爲0 < 23或1 < 23,因此總是返回true。

爲了達到你想要你就必須寫3 < = N & &ň