juhugufudu 发表于 2019-7-29 16:19:30

如何判断类型



如何判断一个完全未知的变量(变量名已知)的类型?
我要判断一个数是整数还是小数(浮点数),怎模板?
求助,谢谢...



MMM啊 发表于 2019-7-29 16:38:39

type函数啊!float就是浮点型也就是小数,int是整数,str是字符串

juhugufudu 发表于 2019-7-29 16:43:18

MMM啊 发表于 2019-7-29 16:38
type函数啊!float就是浮点型也就是小数,int是整数,str是字符串

undefined reference to `type'-->我问的是C语言

MMM啊 发表于 2019-7-29 16:47:44

juhugufudu 发表于 2019-7-29 16:43
undefined reference to `type'-->我问的是C语言

抱歉抱歉,我没看到你问的是c,哈哈,打扰打扰啦

dt3tc 发表于 2019-7-29 20:41:11

if(a-(int)a==0.0){
      printf("a为整数");
    }

Richard149 发表于 2019-7-29 21:21:13

用 sizeof() 操作符

Croper 发表于 2019-7-29 22:27:48

本帖最后由 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:04:26

本帖最后由 jackz007 于 2019-7-29 23:06 编辑

       对于 C 而言,int 和 float 的区别仅仅在于同样是 4 个字节的数据,就看你如何来解释它,如果按整型数来理解,就会有一个整型数值,如果按浮点数的理解,也会有相应的浮点数值。没有什么好办法来判断数据的具体类型。所以,C 在编译的时候,会对所有变量的类型进行严格的检查。

Neverturnback 发表于 2019-7-30 09:02:45

是在什么时候判断?

Neverturnback 发表于 2019-7-30 09:25:05

dt3tc 发表于 2019-7-29 20:41
if(a-(int)a==0.0){
      printf("a为整数");
    }

这个浮点数正好是一个整数的时候这个算法就失效了

Neverturnback 发表于 2019-7-30 09:36:12

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:24:24

本帖最后由 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。。。。

Neverturnback 发表于 2019-7-31 20:52:11

micolar 发表于 2019-7-30 17:24
楼主是否判断一个数是int 还是 float
如果用sizeof 取的是字节数 对于一些编译器int和float 都是4个字节 ...

当这个未知变量等于0的时候,你的这个算法就失效了

micolar 发表于 2019-8-1 11:02:48

Neverturnback 发表于 2019-7-31 20:52
当这个未知变量等于0的时候,你的这个算法就失效了

这还不简单 你把这个值加上或者减去一个非零的整型值 如果类型不匹配 编译器会帮你转换的 这样也可以判断的

Neverturnback 发表于 2019-8-1 13:11:11

本帖最后由 Neverturnback 于 2019-8-1 13:16 编辑

可以了!

AmosAlbert 发表于 2019-8-1 13:29:17

你的意思是不用内置函数,自己写一个吗??

Python.爱好者 发表于 2019-8-2 18:40:33

在网上找到的,地址https://blog.csdn.net/a1226860296b/article/details/82874284,用#include<typeinfo>

joe_mao 发表于 2019-8-3 10:54:27

{:10_254:}

ykn大神6 发表于 2019-8-6 08:32:41

你可以使用type()函数来解决
页: [1]
查看完整版本: 如何判断类型