我运行这些代码,但我得到了一个非常奇怪的数字。我是c ++的新手
ii)预测以下代码片段的输出:
A)
int x=75, y=105;
printf(" %c %lf " , x,y);
对于我得到的第一个x等于K.我明白了 但是因为我得到0,是因为它被声明为int而不是double?
b)中
float pH=5.65582;
printf (" %d %lf" , pH,pH);
现在这个很奇怪。对于第一个pH值,它是1073741824.我甚至不知道他们是如何得到它的。而对于第二个pH值是2.如何? c)中
float p=0.345689;
double q=0.445566778899;
printf ( "%d %f %lf" , p*q, p*q, p/q);
printf ("%d %0.5f %9.3f", p+q , p-q, p*(p+q));
p * q -1713662420
p * q -0.000000
p / q -0.000000
p + q -1561213759
p-q 0
p *(p + q)是一个非常长的数字
591890496450433740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000
我做错了什么?
答案 0 :(得分:4)
您使用错误的printf
格式说明符来表示您传递的参数类型。
要打印float
或double
值,请使用"%f"
,"%g"
或"%e"
或某些变体。对于int
参数,请使用"%d"
。
通过使用特定的格式字符串,您承诺传递正确类型的参数。如果你没有这样做,那你就是骗printf
,结果是未定义的行为。不要那样做。
(可能发生的事情是,例如,printf
正在表示你实际给它的int
参数,而假设表示它是一个表示double
对象。但是不要浪费时间搞清楚为什么会得到你所做的结果。只需修改代码。)
答案 1 :(得分:1)
double
和float
以及int
的实际代表在机器内部非常不同。 printf
中的格式说明符不正确将尝试将此二进制表示解释为特定类型。
垃圾进入 - 垃圾输出