2
int main(void)
{
  int x;
  float y;

  x=10;
  y=4.0;

  printf("%d\n",x/y);

  return 0;
}

gcc コンパイラを使用してこのコードをコンパイルしました。実行すると、出力として 0 が得られます。
このコードの出力が 2 ではなく 0 になるのはなぜですか?

4

2 に答える 2

7

IT は分割ではなく、印刷形式です。

変化する:

printf("%d\n",x/y);

に:

printf("%f\n",x/y);
于 2012-07-18T14:48:14.533 に答える
2

x / yの結果はafloatであり、そのように転送さprintf()れます。
ただし、をprintf()使用%dして入力がであると想定するように指示しましたint
この場合、型チェックや自動型変換はありません。printf()あなたが求めたことを実行するだけです。これは、まったくの偶然により、0が印刷される結果になります。

%dフォーマット文字列で指定し、除算の結果をにキャストする必要がありますint

printf("%d\n", (int)(x/y) );

または、を使用することもできますが、出力として2.5%fを取得することになります。(floor()関数も確認することをお勧めします。)

于 2012-07-18T14:54:55.403 に答える