C言語の基礎
int x = 5;
if (x = 0)
printf("zero ");
else
printf("nonzero ");
printf("%d\n", x);if 文の条件に = を書いた上のコードを実行したときの出力として、正しいものはどれか。
- Azero 0
- Bnonzero 5
- Cnonzero 0
答えと解説を見る
正解:C. nonzero 0
if の条件の x = 0 は、比べる == ではなく代入です。x に0が入り、代入の式の値も0になるので、条件は偽と判断され、else 側の「nonzero」が表示されます。続く printf では、代入で0になった x が表示されます。gcc では -Wall を付けるとこの書き方に警告が出るので、警告を有効にしておくと誤りに気づきやすくなります。
- A. 代入の式の値は代入した0なので、条件は偽になり、zero は表示されません。
- B. x = 0 は比較ではなく代入なので、x は0に変わっています。
- C. 正しい。x に0が代入され、条件は偽になります。