C 为什么从float到double的隐式转换在我的程序中返回一个无意义的数字?
我正在为我的C编程入门课做一个实验作业,我们正在学习铸造 作为练习的一部分,我必须编写此程序,并解释每个练习中发生的铸造:C 为什么从float到double的隐式转换在我的程序中返回一个无意义的数字?,c,casting,integer,double,C,Casting,Integer,Double,我正在为我的C编程入门课做一个实验作业,我们正在学习铸造 作为练习的一部分,我必须编写此程序,并解释每个练习中发生的铸造: #include <stdio.h> int main(void) { int a = 2, b = 3; float f = 2.5; double d = -1.2; int int_result; float real_result; // exercise 1 int_result = a * f; printf("%
#include <stdio.h>
int main(void)
{
int a = 2, b = 3;
float f = 2.5;
double d = -1.2;
int int_result;
float real_result;
// exercise 1
int_result = a * f;
printf("%d\n", int_result);
// exercise 2
real_result = a * f;
printf("%f\n", real_result);
// exercise 3
real_result = (float) a * b;
printf("%f\n", real_result);
// exercise 4
d = a + b / a * f;
printf("%d\n", d);
// exercise 5
d = f * b / a + a;
printf("%d\n", d);
return 0;
}
对于最后两个输出,执行的数学运算产生浮点值。因为存储它们的变量是double类型,所以从float到double的转换不应该影响值,对吗?但是当我打印出d
的值时,我会得到输出中显示的垃圾编号
有人能解释一下吗
但是当我打印出d的值时,我得到了输出中显示的垃圾编号
您正在使用%d
作为格式,而不是%f
或%lf
。当格式说明符和参数类型不匹配时,会出现未定义的行为
%d
接受int
(并以十进制格式打印)
%f
采用双精度
%lf
是一个错误(C89)或相当于%f
(自C99起)
但是当我打印出d的值时,我得到了输出中显示的垃圾编号
您正在使用%d
作为格式,而不是%f
或%lf
。当格式说明符和参数类型不匹配时,会出现未定义的行为
%d
接受int
(并以十进制格式打印)
%f
采用双精度
%lf
是一个错误(C89)或相当于%f
(自C99起)。显示代码时,通常应标记代码的语言。我为您添加了C
标签。哦,对不起,我是新来的。谢谢你的帮助<代码>“%d”
表示整数。打开警告。@hustmphrr否,double
应使用%f
。编译时,始终启用所有警告(对于gcc,至少使用:-Wall-Wextra-pedantic
),然后编译器可以告诉您代码的语法问题。发布的代码引发了两个这样的警告。修复这些警告很可能会修复代码的问题当您显示代码时,通常应该标记代码是什么语言。我为您添加了C
标签。哦,对不起,我是新来的。谢谢你的帮助<代码>“%d”
表示整数。打开警告。@hustmphrr否,double
应使用%f
。编译时,始终启用所有警告(对于gcc,至少使用:-Wall-Wextra-pedantic
),然后编译器可以告诉您代码的语法问题。发布的代码引发了两个这样的警告。修复这些警告很可能会修复代码的问题
5
5.000000
6.000000
1074921472
1075249152