C - argv 存储随机值而不是给定值

C - argv stores random values instead of given ones

程序应采用三个命令行参数,其中第一个是算术操作数,第二个和第三个数字应应用于操作数 该程序将打印随机值。

#include <stdio.h>

int main (int argc, int *argv[])
{
  switch ( (char) * argv[1] )
  {
    case '+' : printf("%d", *argv[2] + *argv[3] );
  }

  return 0;
}

此外,我应该如何获得不同数据类型的命令行参数?使用类型转换是否正确?

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
  if ( argc > 3 )
  {
    switch ( *argv[1] )
    {
       case '+' : 
          printf("answer: %d\n", atoi(argv[2]) + atoi(argv[3])  );
          break;
       default :
          printf("ERROR: operand %c invalid\n",*argv[1]);
    }
  }
  else 
  {
     printf("ERROR: you must enter operator, plus two operands. e.g.:\n");
     printf("%s + 3 2\n",argv[0]);
     return 1;
  }
}

正如其他人所提到的,参数被作为字符串数组读入 argv。因此你必须使用 char *argv[]。从字符串到整数的转换由 atoi 执行。只需将字符转换为整数即可为您提供该字符的 ASCII 表示形式。

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
    switch ( *argv[1] )
    {
        case '+':
            printf("%d\n", atoi(argv[2]) + atoi(argv[3]) );
            break;
    }

    return 0;
}

要获得浮点运算,请将 %d 替换为 %f,将 atoi 替换为 atof

当然你也应该添加完整性检查。至少,您应该检查 argc 以防止读取未初始化的 space。查看评论。

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[]) {
  if(argc != 4) {
    printf("Error message");
    printf("USAGE: ./a.out <operand> <number1> <number2>");
    return 0;
  }
  switch(*argv[1]) {
    case '+':
      printf("%d", (atoi(argv[2])+atoi(argv[3])));
      break;
    default:
      printf("Enter valid operand");
  }
}