Обычно, если нет гарантии, что ваш ввод находится в диапазоне '0' .. '9', вам нужно выполнить проверку следующим образом:
if (c >= '0' && c <= '9') {
int v = c - '0';
// safely use v
}
Альтернативой является использование справочной таблицы. Вы получаете простую проверку диапазона и преобразования с меньшим (и, возможно, более быстрым) кодом:
// one-time setup of an array of 256 integers;
// all slots set to -1 except for ones corresponding
// to the numeric characters
static const int CHAR_TO_NUMBER[] = {
-1, -1, -1, ...,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, // '0'..'9'
-1, -1, -1, ...
};
// Now, all you need is:
int v = CHAR_TO_NUMBER[c];
if (v != -1) {
// safely use v
}
P.S. Я знаю , что это перебор . Я просто хотел представить его как альтернативное решение, которое может быть неочевидным.