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

时间:2017-05-19 09:27:47

标签: c command-line argv

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

#include <stdio.h>

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

  return 0;
}

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

3 个答案:

答案 0 :(得分:1)

#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;
  }
}

答案 1 :(得分:1)

#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");
  }
}

答案 2 :(得分:0)

正如其他人所提到的,参数被读作argv的字符串数组。因此,您必须使用char *argv[]。从字符串到int的转换由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以防止从未初始化的空间读取。见评论。