本文展示一個 C 語言控制台計算器的兩個版本迭代:初版將所有邏輯塞在 main 中,耦合度高;重構版引入函數分離、菜單函數、密碼驗證函數,結構清晰,易維護擴展。
main 函數超過 200 行,包含密碼驗證、菜單顯示、四則運算、求餘、循環控制。do-while 中,嘗試三次機制寫法生硬。// 功能函數聲明
int yanzheng(int); // 密碼驗證
void caidan(); // 顯示菜單
void jiafa(int,int); // 加法
void jianfa(int,int); // 減法
void chengfa(float,float); // 乘法
void chufa(float,float); // 除法
void mo(int,int); // 求餘
// 主流程
void main() {
int x, m, y;
float a, b;
printf("請輸入密碼:\n");
scanf("%d", &x);
m = yanzheng(x);
if (m == 1) {
caidan();
for (; y != 6; ) {
printf("請輸入選項:\n");
scanf("%d", &y);
if (y >= 1 && y < 6) {
printf("請輸入要運算的兩個數:\n");
scanf("%f%f", &a, &b);
}
switch(y) {
case 1: jiafa(a,b); break;
case 2: jianfa(a,b); break;
case 3: chengfa(a,b); break;
case 4: chufa(a,b); break;
case 5: mo(a,b); break;
case 6: break;
default: printf("選項輸入錯誤!請重試\n");
}
}
}
}
| 維度 | 版本一 | 版本二 |
|---|---|---|
| 密碼驗證 | 內聯 do-while,邏輯分散 | 獨立函數 yanzheng,邏輯集中 |
| 菜單顯示 | 重複打印在循環中 | 獨立函數 caidan,復用性強 |
| 運算函數 | 返回值輸出 | 內部直接打印,簡化調用 |
| 變量作用域 | 大量全局變量 | 局部化,減少副作用 |
| 類型一致性 | 混用 int/float,格式化字符串易錯 | 統一用 float 接收,內部按需轉換 |
switch,實現開閉原則。從「能跑通」到「好維護」,關鍵在於職責分離:輸入輸出、業務邏輯、流程控制各司其職。這個小計算器完美演示了重構的核心價值。