命令行参数。计算,乘法(*)不起作用

时间:2014-11-04 23:18:48

标签: c

我是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;
}

2 个答案:

答案 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”,然后将改为