2026-09-15
is_digit_value.c
bool is_digit_value(int x) {
return 0 <= x <= 9;
}
xが0〜9のときだけtrueを返すつもりですが、is_digit_value(42)もis_digit_value(-5)もtrueになります。何が問題で、どう直せばよいでしょうか?
Answer
Cの関係演算子は左結合の普通の二項演算子で、数学のような範囲の連鎖にはなりません。0 <= x <= 9は(0 <= x) <= 9と解釈され、0 <= xの結果(int型の0か1)を9と比べるので、xが何でも常に真です。2つの比較を&&でつなげば直ります:
return 0 <= x && x <= 9;