我正在为C编程课程介绍实验室作业,我们正在学习演员。
作为练习的一部分,我必须编写这个程序并解释每个练习中发生的演员:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_gravity="center"
android:padding="16dp"
android:gravity="center">
<ImageButton
android:id="@+id/thumb_button_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@mipmap/ic_launcher"
android:scaleType="centerCrop"
android:layout_gravity="center"
android:background="@null"
android:contentDescription="@string/description_image_1" />
</LinearLayout>
我得到以下输出:
#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的转换不应该影响值,是吗?但是当我打印出5
5.000000
6.000000
1074921472
1075249152
的值时,我会得到输出中显示的垃圾数字。
有人可以解释一下吗?
答案 0 :(得分:4)
但是当我打印出d的值时,我得到了输出中显示的垃圾数字。
您使用%d
作为格式,而不是%f
或%lf
。当格式说明符和参数类型不匹配时,您会得到未定义的行为。
%d
需要int
(并以十进制格式打印)。
%f
需要double
。
%lf
是错误(C89)或等同于%f
(自C99起)。