我是C的新手,正在学习如何传入命令行参数。 我的Calc程序假设除了3个参数。 ./calc 4 + 3 应该放7。 加法,除法,减法有效,但乘法不起作用。 我将操作数转换为char字符,并使用switch语句来指导操作。 使用乘法时。
./calc 4 * 3
output:
Usage: ./calc x operand y
x: First number
operand: Integer operation
y: Second number
这是我的代码。
int main(int argc, char *argv[]) {
int x, y;
char operand;
if (argc != 4) {
printf("Usage: %s x operand y\n", argv[0]);
printf("x: First number\n");
printf("operand: Integer operation\n");
printf("y: Second number\n");
exit(0);
}
x = atoi(argv[1]);
y = atoi(argv[3]);
operand = argv[2][0];
switch(operand) {
case '+':
printf("%d\n", x + y);
break;
case '-':
printf("%d\n", x - y);
break;
case '/':
printf("%d\n", x / y);
break;
case '*':
printf("%d\n", x * y);
break;
default:
printf("Operand does not exist\n");
}
return 0;
}
答案 0 :(得分:3)
几乎可以肯定,因为 shell 将*
解释为“给我一个当前目录中所有文件的列表”。
尝试:
./calc 4 '*' 3
相反,要阻止这种情况发生。
其他可能性取决于你的shell:
x
进行乘法,而不是*
。\*
作为防止扩展的另一种方式。set -f
关闭通配符扩展。setopt noglob
关闭通配符扩展。在C程序中没有什么可以阻止扩展,因为扩展在C程序开始运行之前完成,而且我不知道任何能够进行时间转换的C实现。
答案 1 :(得分:0)
你被“全球扩张”所困扰,请看这里:(h) https://duckduckgo.com/?q=glob%20expansion%20 *
如果您正在使用bash,请尝试...
在命令行输入“set -f”
将关闭全局扩展。
这不会将asteriksk('*')“扩展”为所有文件。
您可以在命令行中键入“set + f”,然后将