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

C語言面試題:main 參數實作整數計算器 (命令列參數解析)

     編輯:關於C

題目要求

程式接受三個命令列參數:./calc -a 10 20 (加)、-s (減)、-m (乘)、-d (除)。

標準 main 參數原型

int main(int argc, char *argv[]) {
    // argc: 參數個數 (含程式名)
    // argv[0]: 程式名, argv[1]: 選項, argv[2]: 數1, argv[3]: 數2
}

正確實作

#include 
#include 
#include 

int calculate(int a, const char *op, int b) {
    if (strcmp(op, "-a") == 0) return a + b;
    if (strcmp(op, "-s") == 0) return a - b;
    if (strcmp(op, "-m") == 0) return a * b;
    if (strcmp(op, "-d") == 0) {
        if (b == 0) { fprintf(stderr, "除數不能為零\n"); exit(1); }
        return a / b;
    }
    fprintf(stderr, "未知選項: %s\n", op);
    exit(1);
}

int main(int argc, char *argv[]) {
    if (argc != 4) {
        fprintf(stderr, "用法: %s <-a|-s|-m|-d> 數1 數2\n", argv[0]);
        return 1;
    }
    int n1 = atoi(argv[2]);
    int n2 = atoi(argv[3]);
    int result = calculate(n1, argv[1], n2);
    printf("%d %s %d = %d\n", n1, argv[1], n2, result);
    return 0;
}

原始碼問題分析

  • 使用 scanf 互動輸入,非命令列參數。
  • 字串比較用 p == "-a" 比較指針地址,**必須用 strcmp**。
  • main(int argc, int argv) 參數型別錯誤 (argv 應為 char** 或 char*[])。
  • 未檢查 argc、未處理除零、未驗證 atoi 轉換錯誤 (建議用 strtol)。

執行範例

$ ./calc -a 10 5
10 -a 5 = 15
$ ./calc -d 10 0
除數不能為零
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved