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

C 語言實戰:利用 main 函數參數實現命令列整數計算機

     編輯:關於C語言

C 語言實戰:利用 main 函數參數實現命令列整數計算機

C 語言 main 函數完整簽名為 int main(int argc, char *argv[]),可接收命令列參數。本文演示如何解析 argv 實現一個支援加減乘除的整數計算機,並對比兩種參數處理策略。

一、 核心邏輯:運算分發函數

int calculator(int num1, char *op, int num2) {
    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) return num1 / num2;   // 除
    return -1; // 未知操作
}

關鍵點:字符串比較必用 strcmp,不可直接 op == "-a"(比較指針位址而非內容)。

二、 策略一:互動式輸入(掃描運算式)

程式啟動後提示輸入 5+3 格式,內部將運算符映射為選項字串:

int main() {
    int num1, num2; char op;
    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 = ""; break;
    }
    int ret = calculator(num1, opt, num2);
    printf("%d%c%d=%d\n", num1, op, num2, ret);
    return 0;
}

三、 策略二:真正的命令列參數模式

執行 ./calc -a 5 3,直接解析 argv:

int main(int argc, char *argv[]) {
    if (argc != 4) { printf("Usage: %s -a|-s|-m|-d num1 num2\n", argv[0]); return 1; }
    int num1 = atoi(argv[2]);
    int num2 = atoi(argv[3]);
    int ret = calculator(num1, argv[1], num2);
    if (ret == -1) printf("Invalid operator\n");
    else printf("%d %s %d = %d\n", num1, argv[1], num2, ret);
    return 0;
}

此法更符合 Unix 哲學,便於腳本調用與管道組合。

四、 常見錯誤與修正

  1. 指針比較字符串:if (p == "-a") 永假,必用 strcmp(p, "-a") == 0。
  2. 除零未檢查:num2 == 0 時 / 觸發未定義行為,需加判斷。
  3. atoi 錯誤處理:atoi 非數字傳回 0,無法區分「輸入 0」與「輸入錯誤」,建議用 strtol。

五、 擴展思路

  • 支援浮點數:double + strtod + %f。
  • 支援多運算式:解析 argv 中的運算符優先級(遞歸下降或 Shunting-yard)。
  • 加入模數(%)、冪次(^)等運算子。

掌握 argc/argv,是編寫專業命令列工具的第一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved