-3
int main()
 {
  float a=4;
  int b=2;
  printf("%d\n",(a/b));
  printf("%f",(a/b));
  return 0;
 }

最初の printf ステートメントは、さまざまな異なる値を何度も出力しています。浮動小数点数に %d 指定子を使用しているためです。しかし、実際の作業はわかりません。また、最初の行を変更するとき:

int a=4;

次に、2番目のステートメントが印刷されます

0.000000

では、最初のコードの最初の printf が異なる値を出力しているのに、2 番目のコードの 2 番目のステートメントで同じ値を出力しているのはなぜですか?? 誰でも私を説明できますか?

4

2 に答える 2

5

で割るとintintが得られますint。で割るとfloatintが得られますfloat

にはint、 を使用します%d。にはfloat、 を使用します%f。混ぜるとゴミになります。

于 2013-10-13T12:33:57.357 に答える
3

a/b値を与えますfloat(そして に昇格しdoubleます)。指定子で出力すると、%d未定義の動作が呼び出されます。

次に、最初のコードのprintf最初のコードが異なる値を出力しているのに、2 番目のコードの 2 番目のステートメントで同じ値が出力されているのはなぜですか?? 誰でも説明できますか?

これは、未定義の動作が原因です。この場合、期待した結果が得られる場合もあれば、期待した結果が得られる場合もあれば、コンパイラが期待する結果が得られる場合もあります。

于 2013-10-13T12:33:45.683 に答える