0

これらのコードを実行しましたが、非常に奇妙な番号が表示されました。私はc ++が初めてです

ii) 次のコード スニペットの出力を予測します。

a)

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

最初に取得した x は K に等しいです。これは理解できますが、y については 0 を取得しました。これは、double ではなく int として宣言されているためですか?

b)

float pH=5.65582; 
printf (" %d %lf" , pH,pH);

今、これはとても奇妙です。最初の pH は 1073741824 です。どうやってそれを取得したのかさえわかりません。そして 2 番目の 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) 非常に長い数

59189049645043374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000

私は何を間違っていますか?

4

2 に答える 2

4

渡す引数の型に間違ったprintf書式指定子を使用しています。

floatまたはのdouble値を表示する"%f"には、、、、、またはその変形を使用し"%g"ます"%e"int引数には、 を使用します"%d"

特定のフォーマット文字列を使用することで、適切な型の引数を渡すことを約束しています。そうしないと、 に嘘をつきprintf、結果として生じる動作は未定義です。そうしないでください。

(おそらく起こっているのは、たとえば、実際に与えられprintfた引数の表現を取得し、それがオブジェクトの表現であると想定しているということです。しかし、なぜ結果が得られたのかを理解するために時間を無駄にしないでください。ただ修正してください。コード。)intdouble

于 2013-03-25T19:20:45.930 に答える
1

doublefloatとの実際の表現はint、マシン内では大きく異なります。の形式指定子が正しくprintfない場合、このバイナリ表現を特定の型として解釈しようとします。

ガベージイン - ガベージアウト

于 2013-03-25T19:22:55.643 に答える