[英]Two '==' equality operators in same 'if' condition are not working as intended
我試圖建立三個相等變量的相等,但下面的代碼不打印應該打印的明顯正確的答案。 有人可以解釋,編譯器如何在內部解析給定的if(condition)
?
#include<stdio.h>
int main()
{
int i = 123, j = 123, k = 123;
if ( i == j == k)
printf("Equal\n");
else
printf("NOT Equal\n");
return 0;
}
輸出:
manav@workstation:~$ gcc -Wall -pedantic calc.c
calc.c: In function ‘main’:
calc.c:5: warning: suggest parentheses around comparison in operand of ‘==’
manav@workstation:~$ ./a.out
NOT Equal
manav@workstation:~$
編輯:
通過下面給出的答案,以下聲明可以檢查上面的相等嗎?
if ( (i==j) == (j==k))
if ( (i == j) == k )
i == j -> true -> 1
1 != 123
為了避免這種情況
if ( i == j && j == k ) {
不要這樣做:
if ( (i==j) == (j==k))
你會得到i = 1,j = 2,k = 1:
if ( (false) == (false) )
...因此錯誤的答案;)
您需要分開操作:
if ( i == j && i == k)
表達
i == j == k
被解析為
(i == j) == k
所以你將i
與j
進行比較並得到true
。 比你true
地比較123
。 true
將轉換為整數1
。 一個不等於123
,所以表達式是假的。
你需要表達式i == j && j == k
我注意到了編譯器的警告並將其寫成(i==j) && (j==k)
。 寫入需要更長的時間,但它意味着同樣的事情,並且不太可能讓編譯器抱怨。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.