如何在c中检查int或char
How to check int or char in c
我有一个代码可以将摄氏度转换为华氏度。我需要检查用户写的是 char 还是 int。
我试过 isalpha 和 isdigit,但它们不起作用。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
char t[] = "";
scanf("%s", &t);
if(isalpha(t))
{
printf("It's char\n");
}
else if (isdigit(t))
{
printf("It's int\n");
}
return 0;
}
isalpha
和 isdigit
应用于包含 char 的 int 类型的对象。
您正在尝试将这些函数应用于 char * 类型的对象(数组类型在表达式中隐式转换为指针类型)。
此外,数组 t
声明为
char t[] = "";
甚至不足以存储一个从 scanf 获取的字符,因为它还需要存储终止零。否则调用 scanf 将有未定义的行为。而且scanf的调用也不正确
scanf("%s", &t);
^^^
至少应该写成这样
scanf("%s", t);
您可以像这样声明一个 char 类型的对象
char t;
然后像
一样使用scanf
scanf(" %c", &t);
最后
if ( isalpha( ( unsigned char )t ) )
{
printf("It's char\n");
}
else if ( isdigit( ( unsigned char )t ) )
{
printf("It's int\n");
}
首先:
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()
毫无意义,因为所有数字 + 所有 alpha 的并集仍然只是 所有字符.[=26 的子集=]
如果实际上您只是想验证整个字符串是否为数字,则:
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
表示;它也必须在范围内。您可能还想考虑在开头使用 -/+ 符号的可能性,并可能考虑忽略尾随的非数字数字。
我有一个代码可以将摄氏度转换为华氏度。我需要检查用户写的是 char 还是 int。
我试过 isalpha 和 isdigit,但它们不起作用。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
char t[] = "";
scanf("%s", &t);
if(isalpha(t))
{
printf("It's char\n");
}
else if (isdigit(t))
{
printf("It's int\n");
}
return 0;
}
isalpha
和 isdigit
应用于包含 char 的 int 类型的对象。
您正在尝试将这些函数应用于 char * 类型的对象(数组类型在表达式中隐式转换为指针类型)。
此外,数组 t
声明为
char t[] = "";
甚至不足以存储一个从 scanf 获取的字符,因为它还需要存储终止零。否则调用 scanf 将有未定义的行为。而且scanf的调用也不正确
scanf("%s", &t);
^^^
至少应该写成这样
scanf("%s", t);
您可以像这样声明一个 char 类型的对象
char t;
然后像
一样使用scanfscanf(" %c", &t);
最后
if ( isalpha( ( unsigned char )t ) )
{
printf("It's char\n");
}
else if ( isdigit( ( unsigned char )t ) )
{
printf("It's int\n");
}
首先:
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()
毫无意义,因为所有数字 + 所有 alpha 的并集仍然只是 所有字符.[=26 的子集=]
如果实际上您只是想验证整个字符串是否为数字,则:
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
表示;它也必须在范围内。您可能还想考虑在开头使用 -/+ 符号的可能性,并可能考虑忽略尾随的非数字数字。