C语言中关于double和float的问题!

有没有大佬能解释一下这里为什么定义成double运行就会出错,定义成float就又能正常运行了?代码如下:#include<stdio.h>int main(){ double a,b; char x; printf("请输入式子:"); scanf("%f%c%f",&a,&x,&b); switch(x) { case '+':printf("结果是:%.2f\n",a+b);break; case '-':printf("结果是:%.2f\n",a-b);break; case '*':printf("结果是:%.2f\n",a*b);break; case '/': if(b!=0) { printf("结果是:%.2f\n",a/b); }else { printf("很遗憾,除数不能为0!"); } break; default:printf("请输入正确的式子!"); } return 0; }

因为格式化输入scanf要求数据类型和输入格式对应,你只要把scanf里面的%f改为%lf,double就能正常使用了。
还有输出时候不管float和double,都用%f,因为C语言里面就是这么定义的,输出时候统一了,但是如果输出用%lf,大多数编译器也能正常输出。
温馨提示:内容为网友见解,仅供参考
无其他回答

c语言float和double的区别
c语言float和double的区别如下:1、精度不一样,float是单精度,double是双精度;2、表示小数的范围不一样,double能表示的范围比float大;3、double在内存中,占8个字节,float在内存中,占4个字节。%f默认保留6位小数,不足位以0补齐,超过六位按四舍五入的方法保留6位,若想输出指定位数,在格式化...

c语言中double和float的用法
float是C语言中的一种单精度(singleprecision)浮点数格式,其存储空间占用4bit,能够表示出十进制小数精度达到7~8位,十六进制小数精度达到15位。它只占用有限的内存空间,比双精度double类型少了一半,但使用float类型计算两个实数运算可能得出不正确的结果,适用于存储实际数据时要求较低的精度,如绘图和...

c语言中float与double有什么区别?
在C语言中,float与double是两种用于存储浮点数的类型。它们之间最主要的差异在于内存占用量以及能够表示的数值精度。float类型使用4字节的内存来存储数据,而double类型则需要8字节。这使得double类型能够表示更高精度和更宽范围的数值。实际上,double类型的精度大约是float类型的两倍。举个例子,对于数值1.9...

c语言float和double保留小数点后几位
c语言float和double保留小数点后6位。C语言中,输出double类型(双精度实型)以及float类型(单精度实型)时,默认输出6位小数(不足六位以0补齐,超过六位按四舍五入截断)。如果想小数点后面16位,写成%.16lf,不会自动四舍五入的,double是一个近似值,通常没有办法做的很精确。通常能精确到小数点...

C语言float和double的问题?
这两个数输出的都是浮点型,不是整数。a输出的是83.00,只是这个数的小数部分是0而以,它是一个浮点型的数。b输出的是83.00,只是这个数的小数部分也是0而以,它也是一个浮点型的数。

c语言中float和double运算时结果相同吗?
float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 赋值时,一律是右部值转换为左部类型 [注]当整型数据和双精度数据进行运算时,C先将整型数据转换成双精度型数据,再进行运算,结果为双精度类型数据 当字符型数据和实型数据进行运算时,C先将字符型数据转换成实型数...

c语言中double、 float怎么输出?
1.双精度浮点型数据用%lf输出。因为double是8个字节的,float是4个字节的,%f 的格式就是4个字节的,而 %lf 就是8个字节的。 例如:printf("%lf\\n",x);2.short 占用内存空间2个字节,短整型数据用%d输出 例如:printf("%d\\n",a);例:include <stdio.h> int main(){double x;short...

C语言关于double和float的问题
当然。双精度浮点数 double 占用8个字节 单精度浮点数 float 占用4个字节 double能表示更大的数,精度更高。一般都用double,省事。

C语言的float和double的问题。
IEEE规定float有32位 double有64位。一般来说软件都是执行这个标准的,一般机器也都是支持这个标准的,所以一般不需要考虑机器与软件差异的问题。这两种类型的有效位数不同主要是由尾数部分的位数不同导致的:double的尾数部分长度更大,因此能表示的二进制小数就多,对应到10进制小数时精度也更大;float...

C语言中关于float 和double型的问题。
1.在scanf里面的格式串与printf是不一样的 %e 是float, %le才是double, %Le 是long double 所以你后面两个为什么错你应该明白了。2.float的精度的确是6位左右,但这并不说明其前6位有效数字全是正确的,只是说明它的误差小于 十万分之一。 你看看第二个例子,最后的值1.1999999605 如果精度...

相似回答