You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在命令行向带argc/argv的函数传递整数与字符参数

解决命令行传递运算符字符的问题

你的问题出在对argv[3]的处理逻辑上:argv的每个元素是字符串类型,不需要用atoi转换,直接取字符串的第一个字符就是你要的运算符。

核心修改点

  • 替换c = atoi(argv[3]);为c = argv[3][0];:当你在命令行输入*、+这类运算符时,argv[3]是长度为1的字符串,argv[3][0]就是运算符本身,能和判断条件里的'*'、'+'直接匹配。
  • 补充参数合法性检查:避免因参数数量不足、运算符格式错误、除数为0导致程序崩溃或异常。

修改后的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h> // 用于检查运算符字符串长度

int main(int argc, char *argv[]){
    printf("main_add pid: %d\n", getpid());
    int a = 0;
    int b = 0;
    char c;

    // 检查参数数量是否符合要求
    if(argc != 4){
        printf("用法: 程序名 数字1 数字2 运算符(+-*/)\n");
        return 1;
    }

    a = atoi(argv[1]);
    b = atoi(argv[2]);
    
    // 确保运算符是单个字符
    if(strlen(argv[3]) != 1){
        printf("运算符必须是单个字符,请输入+-*/中的一个\n");
        return 1;
    }
    c = argv[3][0];

    if (c=='*'){
        int result = a * b;
        printf("%d * %d = %d\n", a, b, result);
    }
    else if(c=='+'){
        int result = a + b;
        printf("%d + %d = %d\n", a, b, result);
    }
    else if(c=='-'){
        int result = a - b;
        printf("%d - %d = %d\n", a, b, result);
    }
    else if(c=='/'){
        // 除数不能为0的边界检查
        if(b == 0){
            printf("错误:除数不能为0\n");
            return 1;
        }
        int result = a / b;
        printf("%d / %d = %d\n", a, b, result);
    }
    else{
        printf("无效运算符,请使用+-*/中的一个\n");
        return 1;
    }

    return 0;
}

命令行运行示例

编译后按以下格式执行(注意*在shell中是通配符,需要用引号包裹):

# 乘法需加引号避免shell解析通配符
./calc 12 3 "*"
# 加减除可直接输入
./calc 12 3 "+"
./calc 12 3 "-"
./calc 12 3 "/"

内容的提问来源于stack exchange,提问作者MoJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:50:26