簡體   English   中英

為什么打印這個浮點數會導致 c 中的答案錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM