如何判断类型
如何判断一个完全未知的变量(变量名已知)的类型?
我要判断一个数是整数还是小数(浮点数),怎模板?
求助,谢谢...
type函数啊!float就是浮点型也就是小数,int是整数,str是字符串 MMM啊 发表于 2019-7-29 16:38
type函数啊!float就是浮点型也就是小数,int是整数,str是字符串
undefined reference to `type'-->我问的是C语言
juhugufudu 发表于 2019-7-29 16:43
undefined reference to `type'-->我问的是C语言
抱歉抱歉,我没看到你问的是c,哈哈,打扰打扰啦 if(a-(int)a==0.0){
printf("a为整数");
} 用 sizeof() 操作符 本帖最后由 Croper 于 2019-7-29 22:29 编辑
使用sizeof可以判断出变量的长度,
使用类型转换后是否是原值能够判断出类型
这里是能够判断double,float,int,long long四种类型的代码,根据需要可以自行扩展
#include <stdio.h>
#define type32(a) (int)a==*(int*)&a?"int":"float"
#define type64(a) (long long)a==*(long long*)&a?"long long":"double"
#define type(a) sizeof(a)==sizeof(int)?type32(a):type64(a)
int main(){
int a;
long long b;
float c;
double d;
printf("%s %s %s %s",type(a),type(b),type(c),type(d));//输出int long long float double
} 本帖最后由 jackz007 于 2019-7-29 23:06 编辑
对于 C 而言,int 和 float 的区别仅仅在于同样是 4 个字节的数据,就看你如何来解释它,如果按整型数来理解,就会有一个整型数值,如果按浮点数的理解,也会有相应的浮点数值。没有什么好办法来判断数据的具体类型。所以,C 在编译的时候,会对所有变量的类型进行严格的检查。 是在什么时候判断? dt3tc 发表于 2019-7-29 20:41
if(a-(int)a==0.0){
printf("a为整数");
}
这个浮点数正好是一个整数的时候这个算法就失效了 dt3tc 发表于 2019-7-29 20:41
if(a-(int)a==0.0){
printf("a为整数");
}
#include <stdio.h>
int main()
{
int a = 1;
if (a - (int)a == 0.0)
{
a = a + 0.1;
if (a - (int)a == 0.0)
printf("这是一个整数\n");
else
printf("这是一个浮点数\n");
}
else
printf("这是一个浮点数\n");
getchar();
return 0;
}
对你的这个方法进行了改进,这样就可以判断了 本帖最后由 micolar 于 2019-7-30 17:33 编辑
楼主是否判断一个数是int 还是 float
如果用sizeof 取的是字节数 对于一些编译器int和float 都是4个字节 所以是不行的
我就这么想 如果都是用4个字节来表示整数和小数
假如用00000000000000000000000000000001表示1
在我的机器上却用1065353216表示1.0我是window2003 32位编译器
换位二进制
111111100000000000000000000000 我不知道是前面补0还是后面补零
也就是说在机器上规定的32位表示int 和float 是不对等的 所以
#include<stdio.h>
int main(){
float a = 1; //假如是未知数
int* b = &a;//取它的地址
printf("%d\n",*b); //把地址取到的32位二进制数 用int格式输出 注意 有时int不是32位 还有float类型多少位表示小数点后的数字也是不确定的这要看编译器
if( *b == a)
printf("int");
else
printf("float");
printf("\n");
float* c = &a;
printf("%f\n",*c);
if( *c != a)
printf("int");
else
printf("float");
return 0;
}
当然这样还不严谨如果遇到那种2个字节表示int就难受了 不过现在2个字节的比较罕见
而且我刚刚试了一个比较特殊的0。。。。
micolar 发表于 2019-7-30 17:24
楼主是否判断一个数是int 还是 float
如果用sizeof 取的是字节数 对于一些编译器int和float 都是4个字节 ...
当这个未知变量等于0的时候,你的这个算法就失效了 Neverturnback 发表于 2019-7-31 20:52
当这个未知变量等于0的时候,你的这个算法就失效了
这还不简单 你把这个值加上或者减去一个非零的整型值 如果类型不匹配 编译器会帮你转换的 这样也可以判断的 本帖最后由 Neverturnback 于 2019-8-1 13:16 编辑
可以了!
你的意思是不用内置函数,自己写一个吗?? 在网上找到的,地址https://blog.csdn.net/a1226860296b/article/details/82874284,用#include<typeinfo> {:10_254:} 你可以使用type()函数来解决
页:
[1]