首先:
char t[] = "";
创建一个只有一个字符的缓冲区,然后
scanf("%s", t);
除了空字符串输入之外的任何内容都会超出该缓冲区。避免scanf()
溢出并不简单,但即使如此,大多数天真的实现也会有一个实用的缓冲区长度,例如;
char t[128] = "" ;
如果期望输入一个可以转换为 的字符串,那么 10 个十进制数字对于所有32 位正int
整数来说就足够了。
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()
因为所有数字 + 所有 alpha 的并集仍然只是所有字符的子集。
如果实际上您只是想验证整个字符串是否为数字,那么:
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
。它也必须在范围内。您可能还想考虑在开头使用 -/+ 符号的可能性,并可能考虑忽略尾随的非数字数字。