Самым простым возможным способом, как я могу проверить, инициализировало ли целое число от функции scanf
число?
http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
В случае успеха, [scanf] возвращает количество успешно прочитанных пунктов. Данный сайт подсчёт может совпадать с ожидаемым количеством показания или меньше, даже ноль, если случается сбой при совпадении. В случае сбой на входе перед любыми данными можно успешно прочитать, EOF Вернулся.
Так что вы могли бы сделать нечто подобное:
#include <stdio.h>
int main()
{
int v;
if (scanf("%d", &v) == 1) {
printf("OK\n");
} else {
printf("Not an integer.\n");
}
return 0;
}
. Ваш вопрос странно сформулирован. Инициализированное целое число - это всегда число (за исключением экзотических случаев представления в ловушке), что означает, что нет необходимости что-либо проверять.
Я догадываюсь, что Вам нужно проверить, является ли данное строка правильным представлением числа. Для этого сначала нужно определить, как должно выглядеть валидное представление. Вы разрешаете подписывать? Допускается ли избыточное +
(в качестве знака)? Как насчет префикса 0x
для шестнадцатиричных? И так далее.
C язык предлагает свой набор правил, которые определяют представление языка о допустимом строковом представлении целого числа. Если это то, что вам нужно, то для того, чтобы проверить, удовлетворяет ли данная строка этим правилам, лучше всего использовать функцию преобразования строки в целое, такую как strtol
(и другие функции из группы strto...
), а затем проверить состояние ошибки.
Остерегайтесь ответов, в которых предлагается написать свою собственную функцию, которая бы проверяла эти правила. Это просто не имеет смысла, так как стандартная функция уже существует. Также, строго говоря, в реальном программировании редко возникает необходимость выполнять верификацию без реального преобразования. strto...
сделает и то, и другое.
Также, держитесь подальше от функций из группы scanf
до perfrom stringing-to-integer conversion (преобразование из строки в строку). Эти функции приводят к неопределенному поведению при переполнении (т.е. если входное представление строки слишком длинное). В общем случае, единственный правильный способ сделать такое преобразование в Си - это функции из группы strto...
strto...