0

我运行了这些代码,但我得到了一个非常奇怪的数字。我是 C++ 新手

ii) 预测以下代码片段的输出:

一个)

int x=75, y=105;
printf(" %c %lf " , x,y);

对于第一个我得到的 x 等于 K。我理解,但是对于 y 我得到 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

pq 0

p*(p+q) 一个很长的数

5918904964504337400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000

我究竟做错了什么?

4

2 回答 2

4

printf为传递的参数类型使用了错误的格式说明符。

要打印floatordouble值,请使用"%f", "%g", or "%e", 或一些变体。对于int参数,使用"%d".

通过使用特定的格式字符串,您承诺传递正确类型的参数。如果你不这样做,你就是在撒谎printf,并且由此产生的行为是不确定的。不要那样做。

(可能发生的情况是,例如,printf正在获取int您实际给出的参数的表示,并假设它是一个double对象的表示。但不要浪费时间弄清楚为什么你会得到你所做的结果。只需修复编码。)

于 2013-03-25T19:20:45.930 回答
1

doublea and floatand的实际表示int在机器内部是非常不同的。不正确的格式说明符printf将尝试将此二进制表示解释为特定类型。

垃圾进垃圾出

于 2013-03-25T19:22:55.643 回答