首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言模擬計算器:switch 分支與函數指針表兩種架構

     編輯:關於C

架構一:switch-case 直觀版

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){return b? a/b : (puts("除數為0"),0);}

int main() {
    int op, a, b;
    while (1) {
        puts("1:加 2:減 3:乘 4:除 0:退出");
        if (scanf("%d", &op) != 1 || op == 0) break;
        if (op < 1 || op > 4) continue;
        scanf("%d %d", &a, &b);
        int (*funcs[5])(int,int) = {0, add, sub, mul, div}; // 索引對應選項
        printf("結果: %d\n", funcs[op](a, b));
    }
    return 0;
}

架構二:函數指針表 (查表法,擴充性強)

enum Op { EXIT, ADD, SUB, MUL, DIV };
int (*ops[5])(int,int) = {0, add, sub, mul, div}; // 全域/靜態表

int main() {
    int op, a, b;
    while (1) {
        menu();
        if (scanf("%d", &op) != 1) break;
        if (op == EXIT) break;
        if (op < ADD || op > DIV) { puts("錯誤選項"); continue; }
        scanf("%d %d", &a, &b);
        printf("結果: %d\n", ops[op](a, b));
    }
    return 0;
}

核心優勢對比

菜單函數

void menu() {
    puts("*************************");
    puts("**** 1.add  2.sub *****");
    puts("**** 3.mul  4.div *****");
    puts("******** 0.exit ********");
    puts("*************************");
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性switch函數指針表
新增運算修改 switch 增加 case新增函數、擴充表、枚舉,無需動主邏輯
執行效率跳轉表優化後相近一次間接呼叫
程式碼組織集中分離 (開閉原則)
動態載入困難支援 (dlopen 註冊)