Namaran

Code daily. Without assist.

2026-09-15

is_digit_value.c

bool is_digit_value(int x) {
    return 0 <= x <= 9;
}

x09のときだけtrueを返すつもりですが、is_digit_value(42)is_digit_value(-5)trueになります。何が問題で、どう直せばよいでしょうか?

Answer

Cの関係演算子は左結合の普通の二項演算子で、数学のような範囲の連鎖にはなりません。0 <= x <= 9(0 <= x) <= 9と解釈され、0 <= xの結果(int型の01)を9と比べるので、xが何でも常に真です。2つの比較を&&でつなげば直ります:

return 0 <= x && x <= 9;