本文實現一個接收三個參數的計算函數:運算符選項(-a/-s/-m/-d)與兩個操作數。主程式掃描用戶輸入的算式(如 5+3),將運算符映射為選項字串,再呼叫計算函數。
int my_math(char *op, int num1, int num2) {
assert(op);
if (strcmp(op, "-a") == 0) return num1 + num2;
if (strcmp(op, "-s") == 0) return num1 - num2;
if (strcmp(op, "-m") == 0) return num1 * num2;
if (strcmp(op, "-d") == 0) {
if (num2 == 0) { fprintf(stderr, "Divide by zero\n"); return 0; }
return num1 / num2;
}
return 0; // 未知運算符
}
關鍵:字符串比較用 strcmp、除零防護。
int main() {
int num1, num2; char op;
printf("請輸入算式(如 5+3):");
scanf("%d%c%d", &num1, &op, &num2); // 讀取 5+3
char *opt = "";
switch (op) {
case '+': opt = "-a"; break;
case '-': opt = "-s"; break;
case '*': opt = "-m"; break;
case '/': opt = "-d"; break;
default: opt = "\0";
}
int result = my_math(opt, num1, num2);
printf("%d%c%d=%d\n", num1, op, num2, result);
return 0;
}
輸入:10+5 輸出:10+5=15
輸入:10-3 輸出:10-3=7
輸入:6*7 輸出:6*7=42
輸入:20/4 輸出:20/4=5
輸入:5/0 輸出:Divide by zero / 5/0=0
scanf("%d%c%d") 中 %c 會讀取運算符,但若輸入有空格需用 %d %c %d。"-a" 類型為 const char*,函數參數宜用 const char*。switch 內 break 不可漏,否則貫穿導致邏輯錯誤。%lf + double)。./calc -a 10 5 直接解析 argv。