马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
int main(void)
{
float aboat=32000.0;
double abet=2.14e9;
long double dip = 5.32e-5;
printf("%f can be written %e\n",aboat,aboat);
printf("and it's %a in hexadecimal,powers of 2 notation\n",aboat);
printf("%f can be written %e\n",abet,abet);
printf("%Lf can be written %Le\n", dip, dip); /*这里有问题,不知道怎么回事。 */
return 0;
}
输出为:
32000.000000 can be written 3.200000e+004
and it's 0x1.f40000p+14 in hexadecimal,powers of 2 notation
2140000000.000000 can be written 2.140000e+009
0.000000 can be written 3.205284e-317
求解答
本帖最后由 pheron 于 2018-9-28 10:31 编辑
这就是位数问题了,编译器的毛病,而最终的锅在微软的运行库背上。微软对C语言不太友好,很多运行库都是32位的,如果你用Linux的话,这一行不会出错,而上一行会报警告。
事实上你的上一行有点问题:
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。
其中:
float,单精度浮点型,对应%f.
double,双精度浮点型,对应%lf.
在用于输入时:
double 类型使用了%f格式,会导致输入值错误。
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃。
至于long double,需要要用%Lf,注意L必须大写。
|