Во-первых:
char t[] = "";
создает буфер ровно из одного символа, затем
scanf("%s", t);
переполнит этот буфер для чего угодно, кроме ввода пустой строки.Обеспечить защиту scanf()
от переполнения не так просто, но даже в этом случае наиболее наивная реализация будет иметь практическую длину буфера, например:
char t[128] = "" ;
Если ожидается ввод строки, которая может быть преобразована в int
, тогда 10 десятичных цифр достаточно для всех положительных 32-битных целых чисел.
scanf("%10s", t);
char
и int
являются типами данных, здесь пользователь только когда-либо вводит строку.Ваш вопрос действительно заключается в том, ввел ли пользователь что-то, что может быть интерпретировано как целое число или нет.
isalpha()
и isdigit()
работают с одиночными символами, но t
является строкой.
Следующая команда проверит первый символ строки t
:
if( isdigit(t[0]) )
{
printf("It's digit\n");
}
else
{
printf("It's not a digit\n");
}
Обратите внимание, что проверка на isalpha()
не имеет смысла, поскольку объединение всех цифр + всей альфы все ещеподмножество всех символов .
Если на самом деле вы просто хотите проверить, что вся строка является числовой, то:
for( int i = 0; t[i] != 0 && isdigit(t[i]) i++ )
{
// nothing
}
if( t[i] == 0 )
{
printf("It's numeric\n");
}
else
{
printf("It's not entirely numeric\n");
}
Даже тогда это не то, чточисловая строка может быть представлена int
;это также должно быть в диапазоне.Возможно, вы захотите рассмотреть возможность знака - / + в начале и можете игнорировать завершающие нечисловые цифры.