原代碼用 if (num == 'Y') break; 比較 float 與字符常量,邏輯錯誤且無法觸發。正確做法:約定輸入 0 結束(或負數、特定標記),並修復循環結構。
#include <stdio.h>
int main(void) {
float num, sum = 0, avg;
int count = 0;
printf("請輸入浮點數(輸入 0 結束):\n");
while (1) {
if (scanf("%f", &num) != 1) break; // 輸入失敗退出
if (num == 0) break; // 終止條件
sum += num;
count++;
}
if (count > 0) {
avg = sum / count;
printf("平均值為:%.2f\n", avg);
} else {
printf("未輸入有效數據。\n");
}
return 0;
}
num == 0(浮點數比較 0 安全),或 num < 0 視業務而定。scanf 返回值檢查,防非數字輸入導致死循環。%.2f 保留兩位小數,去除中文標點干擾。若必須用字符 'Y' 結束,需改用 char buf[32] 讀行,sscanf 解析,先判斷 strcmp(buf, "Y") == 0 再轉浮點數。