如何在命令行向带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
相关产品推荐
相关产品推荐

