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()関数も確認することをお勧めします。)