原代碼錯誤分析
// 原代碼主要錯誤:
int num, en, on; // en、on 未初始化,含隨機垃圾值
float aen = 0, aon = 0; // 平均值累加器命名易混淆
whlie(0 != num) // 拼寫錯誤:whlie → while
// 輸出格式 %lf 對應 double,float 用 %f 即可
修正後完整代碼
#include <stdio.h>
int main(void) {
int num = 0; // 輸入數字
int evenCount = 0; // 偶數個數(初始化 0)
int oddCount = 0; // 奇數個數(初始化 0)
int evenSum = 0; // 偶數和
int oddSum = 0; // 奇數和
printf("Please enter integers (0 to stop):\n");
scanf("%d", &num);
while (num != 0) { // 修正拼寫:while
if (num % 2 == 0) { // 偶數
evenCount++;
evenSum += num;
} else { // 奇數
oddCount++;
oddSum += num;
}
scanf("%d", &num);
}
// 輸出結果(避免除零)
printf("Even count: %d, Odd count: %d\n", evenCount, oddCount);
if (evenCount > 0)
printf("Even average: %.2f\n", (float)evenSum / evenCount);
if (oddCount > 0)
printf("Odd average: %.2f\n", (float)oddSum / oddCount);
printf("Done\n");
return 0;
}
新手必記三大鐵律
- 所有變量使用前必須初始化(特別是計數器、累加器)。
- 關鍵字拼寫務必精確:
while、for、if、else、return 等。
- 除法運算注意類型轉換:整數相除截斷,需強轉
(float) 或乘 1.0 得小數。
進階優化建議
- 用
long long 存儲和,防止大量數據溢出。
- 輸入驗證:檢查
scanf 返回值,處理非數字輸入。
- 模塊化:提取
processNumbers() 函數,主函數只調用。