[英]Why does the printing of this float number result in the wrong answer in c
我正在學習 c,但無法通過谷歌找到答案(也許我使用了錯誤的關鍵字)
無論如何,這是一個簡單的程序,用於獲取學生在 2 個科目中的平均成績:
#include <stdio.h>
int main() {
int grades[2][2] = {{90, 78}, {92, 83}};
float avg1, avg2;
avg1 = ( grades[1][1] + grades[2][1] ) / 2;
avg2 = ( grades[2][1] + grades[2][2] ) / 2;
printf("Average 1 is: %d \n", avg1);
printf("Average 1 is: %f", avg1);
return 0;
}
我期待 91 的答案。
%d 給我:250732472
%f 給我:16424.000000
為什么會發生這種情況? 我在網上找到了一個解決方案,它使用 int 數據類型作為成績數組,使用浮點數作為平均值,他們的解決方案有效。
首先,您沒有打印任何內容,因為每個printf
調用中都缺少一個參數 - 與每個格式說明符匹配的值。
現在,如果你的代碼看起來像這樣,
avg1 = ( grades[1][1] + grades[2][1] ) / 2;
avg2 = ( grades[2][1] + grades[2][2] ) / 2;
printf("Average 1 is: %d\n", avg1);
printf("Average 2 is: %f\n", avg2);
那么你正在處理未定義的行為,這就是為什么你的輸出看起來很時髦。 那是因為,在您的第一次printf
調用中,您使用的是%d
- 這是整數的格式說明符。 如果要打印浮點變量,無論是 32 ( float
) 還是 64 ( double
) 位長,都應使用說明符%f
。
您的代碼還有另一個問題會導致未定義的行為: grades
是 2 個元素長,因此[2]
索引超出范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.