isdigit
и др.Я для проверки символов.10-99999 больше не является одним символом.Если вы хотите проверить, является ли строка «8382820» числовой, у вас есть (как минимум) 3 варианта:
- Зацикливание строки и выполнение
isdigit
для каждого символа (сбой, если один изих нет) - Используйте регулярное выражение (
"^[0-9]+$"
должно сработать, но не очень практично в C) - Используйте
strtol
и убедитесь, что указатель конца равен нулютерминатор.
Вот идея о том, как использовать strtol:
char* myString = "9823872";
char* endPtr = NULL;
long int myInt = strtol(myString, &endPtr, 10);
if(endPtr && *endPtr != '\0')
{
fprintf(stderr, "Sorry, that's not a valid number\n");
exit(1);
}
Возможно, есть и другие умные ответы, касающиеся scanf или atoi, но я просто оставлю это здесь дляТеперь.