代碼:
float b1,b2,b4,b6,b10,b11,b;
...
printf("bonus=%ld", b); // 錯誤:%ld 對應 long,但 b 是 float
%ld 期望 long int,傳入 float 導致未定義行為,輸出亂碼或 0。%f(float/double)或 %lf(double)。// 選項 1:改用 double + %lf(建議)
double b1,b2,b4,b6,b10,b11,b;
...
printf("bonus=%lf\n", b);
// 選項 2:維持 float + %f
printf("bonus=%f\n", b);
int main() {
long int i;
double b1,b2,b4,b6,b10,b11,b;
scanf("%ld", &i);
b1 = i*0.1;
b2 = b1 + (i-100000)*0.075;
b4 = b2 + (i-200000)*0.05;
b6 = b4 + (i-400000)*0.03;
b10 = b6 + (i-600000)*0.015;
b11 = b10 + (i-1000000)*0.01;
if (i<=100000) b=b1;
else if (i<=200000) b=b2;
else if (i<=400000) b=b4;
else if (i<=600000) b=b6;
else if (i<=1000000) b=b10;
else b=b11;
printf("bonus=%lf\n", b);
return 0;
}
「%ld 印 float」是 C 語言新手最常見的格式化錯誤之一。