Cでは、このprintf行を別の行に変更すると、printf("%f\n", 5/2);
の出力が変更されます。何か案は?printfを異なる行に移動すると出力が異なりますか? (C)
HERESにコード:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int a = 65;
char c = (char)a;
int m = 3.0/2;
printf("%c\n", c);
printf("%f\n", (float)a);
printf("%f\n", 5.0/2);
printf("%f\n", 5/2.0);
printf("%f\n", (float)5/2);
printf("%f\n", 5/(float)2);
printf("%f\n", (float)(5/2));
printf("%f\n", 5.0/2);
printf("%d\n", m);
printf("%f\n", 5/2);
system("PAUSE");
return(0);
}
そして相続人出力:
A
65.000000
2.500000
2.500000
2.500000
2.500000
2.000000
2.500000
1
2.500000
私はAを出力1と出力1との間の最初の行(のいずれかにprintf("%f\n", 5/2);
を移動する場合65.000000)それは現在の2.500000の代わりに0.000000(それは理にかなっています)を出力します。 アイデア
'printfの( "%fが\ nを"、5月2日);'利回り未定義の振る舞い。 (整数)除算 '5/2'の結果は、整数オペランドであり、値は '2'である。コンパイラが 'printf'に渡す前に' double'に展開するという事実は言うまでもなく、 'printf'はスタックから8バイトのデータを読み込もうとしますが、データの 'sizeof(int)'バイトだけを保持します)。 –
'%f'で整数を出力することはできません。 – Lundin
printfに関するC99標準に従う "対応する変換仕様の引数が正しくない場合、その動作は未定義です。" (WG14 N1570,7.161.1/p9)。 –