Стандартная библиотека C уже имеет такой зверь:
#include <ctype.h>
:
if (! isdigit(ch)) {
printf("'%c' is not a digit\n", ch);
}
Если по какой-то странной причине (a) вы не можете использовать стандартную библиотечную функцию, просто бросьте свою собственную:
bool isDigit(int ch) { // Uppercase D to distinguish it.
return ch >= '0' && ch <= '9';
}
Вы также можете сделать это непосредственно в коде, а не как функцию:
if (ch < '0' || ch > '9') puts("Not a digit"); // or:
if (ch >= '0' && ch <= '9') puts("Is a digit");
Цифровые символы в C * гарантированно смежными, в отличие от всех других символов. Вот почему делать то же самое для альф (например, ch >= 'a' && ch <= 'z'
) - плохая идея.
Имейте в виду, что одиночный символ является цифрой. Похоже, это то, что вы хотите. Чтобы проверить, является ли символ string допустимым целым числом, он должен быть более сложным. По сути, каждый символ должен быть цифрой, и у него может быть дополнительный знак спереди. Примерно так будет хорошим началом:
bool isInt(char *sstr) {
unsigned char *str = sstr;
if (*str == '+' || *str == '-')
++str;
if (! isdigit(*str++)) // or your own isDigit if desired.
return false;
while (*str != '\0')
if (! isdigit(*str++)) // ditto.
return false;
return true;
}
(a) Хотя я полагаю, вы, возможно, захотите сделать это в образовательных целях, поэтому необязательно , что причудливо: -)