程式接受三個命令列參數:./calc -a 10 20 (加)、-s (減)、-m (乘)、-d (除)。
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 除數不能為零