使用if / else语句检查枚举参数是否存在

时间:2014-10-31 21:11:58

标签: c enums arguments

我对我当前的代码有轻微的问题,并尝试检查在尝试继续该程序之前已将参数传递给枚举;

 enum arg {argName, sineArg, sampleArg, argC}eargs;

 int main(int argc, char *argv[]){

    long samplingRate = atol(argv[sampleArg]);
    float sineFreq = atof(argv[sineArg]);
    if (argC < eargs ){
        printf("Usage: sineFreq\tsamplingRate\n");
    }else{}
  }

代码编译很好,但是当没有参数运行时,程序返回&#34;分段错误:11&#34;而不是我想要打印到控制台的用法消息。

4 个答案:

答案 0 :(得分:1)

在访问argv[...]

之前,您必须先进行检查

编辑:检查本身也是错误的(eargs未定义;你应该写

int main(int argc, char *argv[]) {
    if (argc < argC)         /* --> you should change you naming conventions! */
        return EXIT_FAILURE;

    long samplingRate = atol(argv[sampleArg]);

答案 1 :(得分:0)

您需要将argC更改为argc,在if语句中... c区分大小写!

答案 2 :(得分:0)

您的使用情况检查是针对与传递的命令行参数数量无关的eargs。无论您传递了多少参数,eargs始终都是0

此外,您应该使用任何命令行参数检查之前的。将条件放在main()

的开头
#include<stdio.h>
#include <stdlib.h>

enum arg {argName, sineArg, sampleArg, argC}eargs;

int main(int argc, char *argv[]) {

  /* if ( argc < 3) would be explicit and clear here */
  if (argc < argC ) { /* You expect at least two arguments */
    printf("Usage: sineFreq\tsamplingRate\n");
    return 1; // return from main on failure
  }

  long samplingRate = atol(argv[sampleArg]);
  float sineFreq = atof(argv[sineArg]);

  ....
}

我在使用printf()atol()

时也添加了标准标题

答案 3 :(得分:0)

当你运行没有参数的代码时,这个

 long samplingRate = atol(argv[sampleArg]);

访问argv [2],这是未定义的行为,因为你没有提供足够的args(只有argv [0] =程序名称和argv [1] = NULL表示结束argv [])。