int main(void)
{
int x;
float y;
x=10;
y=4.0;
printf("%d\n",x/y);
return 0;
}
gcc コンパイラを使用してこのコードをコンパイルしました。実行すると、出力として 0 が得られます。
このコードの出力が 2 ではなく 0 になるのはなぜですか?
IT は分割ではなく、印刷形式です。
変化する:
printf("%d\n",x/y);
に:
printf("%f\n",x/y);
x / yの結果はafloat
であり、そのように転送さprintf()
れます。
ただし、をprintf()
使用%d
して入力がであると想定するように指示しましたint
。
この場合、型チェックや自動型変換はありません。printf()
あなたが求めたことを実行するだけです。これは、まったくの偶然により、0が印刷される結果になります。
%d
フォーマット文字列で指定し、除算の結果をにキャストする必要がありますint
。
printf("%d\n", (int)(x/y) );
または、を使用することもできますが、出力として2.5%f
を取得することになります。(floor()関数も確認することをお勧めします。)