Cに問題があります。
#include<stdio.h>
int main()
{
int a = 10, b = 0, c = 7;
if (a ? b : c == 0)
printf("1");
else if (c = c || a && b)
printf("2");
return 0;
}
このコードは2を出力しますが、a?b:cはb = 0を返し、0 ==0は1を返すと思います。コードを説明できますか?
Cに問題があります。
#include<stdio.h>
int main()
{
int a = 10, b = 0, c = 7;
if (a ? b : c == 0)
printf("1");
else if (c = c || a && b)
printf("2");
return 0;
}
このコードは2を出力しますが、a?b:cはb = 0を返し、0 ==0は1を返すと思います。コードを説明できますか?
条件演算子(?:
)は、優先順位が最も低いものの1つです。特にそれはより低いです==
。あなたの声明はこれを意味します:
if(a ? b : (c == 0)) { ... }
これではない:
if((a ? b : c) == 0) { ... }
あなたの条件は正しく書かれていません。
最初のifステートメント:
if (a ? b : c == 0)
値を入れると、
if(10 ? 0 : 7 == 0)
つまり、常に0を返します。
そういうわけで制御は他の部分に行き、そこで、それはなります
else if (7 = 7 || 10 && 0)
ここでは「=」演算子(c = c)を使用したため、常にtrueになり、「2」が出力されます。
ここで、コードが「1」を返すようにし、ifステートメントをこのように変更します。
if( (a ? b:c) == 0){...}
「==」演算子は三項演算子よりも優先順位が高いためです。