2010-08-16 246 views
1

我對邏輯AND運算符有點困惑。 我有這兩行代碼。這裏numj都是int。我有兩種條件都滿足的情況,但我不知道爲什麼它不打印j的值。有人可以指出錯誤嗎?提前致謝。邏輯AND運算符

if(k==1 && num%j==0) 
    printf("%d",j); 
+0

那麼,你能告訴我們這種情況嗎? :) – fresskoma 2010-08-16 18:45:09

+0

一行代碼無法解決問題。你應該更好地描述問題。 – dierre 2010-08-16 18:46:40

+4

要調試此問題,請在條件語句之前打印'k','j','num',甚至可能是'num%j'的值以查看它們的真實含義。然後,如果您仍然卡住,請用鉛筆和紙張手工進行評估。 – FrustratedWithFormsDesigner 2010-08-16 18:47:37

回答

6

用簡單的英語,表達k == 1 && num % j == 0爲真,當且僅當k等於1 其餘分裂num通過j是0。沒有更多的,我可以說。

1

這裏有兩種可能性。要麼你永遠不會去printf,否則輸出永遠不會得到你。

對於第一種情況,您確定k == 1num % j == 0?在測試中給我們提供實際的數值可能會有所幫助。請注意,如果k是一個計算結果的浮點數,它可能會稍微偏離1.0,並且該條件將返回false。

對於第二種情況,你如何測試這個?這應該打印出j的值,但它不會刷新輸出,所以如果程序異常終止或者控制檯在程序結束時消失或者您可能看不到它。嘗試printf("%d\n", j);或甚至fflush(stdout);以確保輸出在控制檯或終端上可見。

0

如果條件爲真,代碼中沒有問題。

檢查輸出here

0

您可能還想添加一個else語句。我無法計算這發生在我身上的次數。至少在編碼的初始階段,這是一個很好的做法。做到這一點:

這將幫助您捕捉

if(k==1 && num%j==0) 
    printf("%d",j); 
else { 
    printf("%d \n",k); 
    printf("%d \n",num); 
    printf("%d \n",j); 
    printf("%d \n",(num%j)); 
} 
0

你的代碼運行正常的問題,看看這個testcase:

http://ideone.com/1gz8R

所以,問題不在於這兩條線。嘗試打印涉及到的三個值之前,您可能會對您看到(或看不到)感到驚訝。

0

你也應該得到使用括號寬鬆,海事組織的習慣:

if(k == 1 && (num % j == 0)) 

在最少。

+0

Blech!對我來說,多餘的括號會降低可讀性,並建議作者不確定他使用的語言是如何工作的。 – 2010-08-16 21:11:32

+1

儘管這是主觀的,但我認爲像這樣的括號只會增加可讀性,因爲在操作順序中可能存在歧義。 – Jonathan 2010-08-16 21:57:21

+0

是的,當然這是主觀的,但事實上,上述運營商可能被認爲是模棱兩可的,這說明我對完全不熟悉。忘記使用較少使用(或至少較少混合)的運算符(例如''''''''''''''''''':'和朋友)的優先規則是可以理解的,但是沒有什麼理由不支持記住簡單的例子。他們非常直觀。布爾運算符('&&','||')的優先級低於比較運算符('==','<'等)的優先級('&&'是兩者中較高的那個),它們低於算術運算符,遵循正常的數學規則。 – 2010-08-16 22:10:32