Проверка того, может ли это быть int достаточно просто - просто проверьте, что каждая цифра находится между '0'
и '9'
. Но поплавок сложнее. Я нашел этот, но ни один из ответов не работает. Рассмотрим этот фрагмент кода, основанный на верхнем (принятом) ответе:
float f;
int ret = sscanf("5.23.fkdj", "%f", &f);
printf("%d", ret);
1
будет напечатан.
Еще один ответ предложил использовать strpbrk
, чтобы проверить наличие определенных незаконных символов, но это не сработает, потому что 5fin7
не будет законным, но inf
будет.
Еще один ответ предложил проверить вывод strtod. Но учтите следующее:
char *number = "5.53 garbanzo beans"
char *foo;
strtod(number, &foo);
printf("%d", isspace(*foo) || *foo == '\0'));
Он напечатает 1
. Но я не хочу полностью удалить вызов isspace
, потому что " 5.53 "
должен быть допустимым числом.
Есть ли хороший, элегантный, идиоматический способ делать то, что я пытаюсь сделать?