實現簡易整數計算器,支援加減乘除,選單驅動,輸入 0 退出。
#include <stdio.h>
#include <stdlib.h>
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int div(int a, int b) {
if (b == 0) { printf("除數不能為 0\n"); return 0; }
return a / b;
}
void menu() {
puts("*************************");
puts("**** 1.add 2.sub ****");
puts("**** 3.mul 4.div ****");
puts("******** 0.exit ********");
puts("*************************");
}
int main() {
int input, num1, num2, ret;
while (1) {
menu();
printf("請選擇 >: ");
scanf("%d", &input);
if (input == 0) break;
printf("請輸入兩個整數 >: ");
scanf("%d%d", &num1, &num2);
switch (input) {
case 1: ret = add(num1, num2); break;
case 2: ret = sub(num1, num2); break;
case 3: ret = mul(num1, num2); break;
case 4: ret = div(num1, num2); break;
default: printf("選項錯誤\n"); continue;
}
printf("結果 = %d\n", ret);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
enum Op { EXIT, ADD, SUB, MUL, DIV };
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int div(int a, int b) {
if (b == 0) { printf("除數不能為 0\n"); return 0; }
return a / b;
}
// 函數指標陣列,索引對應 enum
int (*calc[5])(int, int) = { NULL, add, sub, mul, div };
int main() {
int input, num1, num2;
while (1) {
menu();
printf("請選擇 >: ");
scanf("%d", &input);
if (input == EXIT) break;
printf("請輸入兩個整數 >: ");
scanf("%d%d", &num1, &num2);
if (input >= ADD && input <= DIV) {
printf("結果 = %d\n", calc[input](num1, num2));
} else {
printf("選項錯誤\n");
}
}
return 0;
}
| 維度 | switch-case | 函數指標陣列 |
|---|---|---|
| 新增運算 | 修改 switch、增函數 | 增函數、擴展陣列、增 enum |
| 程式碼結構 | 集中式分派 | 資料驅動、表驅動 |
| 擴展性 | 一般 | 優 (符合開閉原則) |
| 適用場景 | 固定少量操作 | 插件架構、動態載入、狀態機 |
enum 讓索引有語意,維護性更佳。