簡體   English   中英

處於相同“if”條件的兩個“==”相等運算符未按預期工作

[英]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

所以你將ij進行比較並得到true 比你true地比較123 true將轉換為整數1 一個不等於123 ,所以表達式是假的。

你需要表達式i == j && j == k

我注意到了編譯器的警告並將其寫成(i==j) && (j==k) 寫入需要更長的時間,但它意味着同樣的事情,並且不太可能讓編譯器抱怨。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM