Programming Place Plus トップページ – C言語編 – 逆引き
以下は目次です。
ある数値が、ある範囲内に収まっているかどうかを調べたいとします。
といったことです。結果は、真か偽のいずれかです。
if文を使って判定すればいいだけのことですが、数学でやるように -5 <= x <= 5
のような式は正しく動作しないことに注意しなければなりません。
#include <stdio.h>
int main(void)
{
int x = 10;
// 間違った方法
if (-5 <= x <= 5) {
("true");
puts}
else {
("false");
puts}
}
実行結果:
true
10 は -5~5 の範囲内にはありませんから、結果は false になることを期待しますが、出力結果は true になりました。
C言語では、-5 <= x <= 5
という式は (-5
<= x) <= 5
のように扱われてしまいます。そのためまず
-5 <= x
が判定されます。x が 10
ならこの判定は真なので、結果は 1 です。その後、1 <= 5
が判定されて、これも真になるので、結果は 1 となります。よって、-5
<= x <= 5
は全体として 1(真)です。
正しく判定するには、論理積演算子(第15章)を使って、-5 <= x
&& x <= 5
といったように、下限値と上限値の判定を分けて行うようにします。
#include <stdio.h>
int main(void)
{
int x = 10;
if (-5 <= x && x <= 5) {
("true");
puts}
else {
("false");
puts}
}
実行結果:
false
正しい結果が得られました。
return 0;
を削除(C言語編全体でのコードの統一)
Programming Place Plus のトップページへ