如果语句检查argv是否为数字

时间:2015-10-16 22:48:12

标签: c if-statement g++ argv

我的程序中有这个if语句,应该检查启动程序时输入的参数。例如./a.out 2 2 + 0 x(如果有人可以用英语写出这种输入参数的正确名称,我将不胜感激。

我的if语句应检查输入的参数是否不是数字:

if(atof(argv[cnt]) == 0 && argv[cnt] != "0")

但是当argb [cnt] = 0时这是不幸的,这是不幸的(用GDB检查) 我做错了什么以及如何解决它?

1 个答案:

答案 0 :(得分:2)

您可以在C strtol(3)(或strtod(3)用于管理结束指针的double - s)中使用:

char* end = NULL;
long n = strtol(argv[cnt], 0, &end);
if (n > 0 && *end == '\0')
   printf("got a good number %ld\n", n);

您还可以使用sscanf(3)%n。请注意,它返回扫描的项目计数:

int p= -1;
long n = 0;
if (sscanf(argv[cnt], "%ld %n", &n, &p) >= 1 && p>0)
  printf("got a good number %ld (and scanned %d bytes)", n, p);

顺便说一句,如果您需要比较字符串,请使用strcmp(3)argv[cnt] != "0"正在比较地址,我确定你的(或我的)系统总是如此(即使对于0程序参数),因为程序参数是在call stack中,但文字字符串位于code segment

如果您使用C++11进行编码,请了解std::stringoperator ==按照您的想法行事)以及std::istringstream

请勿忘记编译所有警告和调试信息(gcc -Wall -Wextra -g),然后使用调试器gdb)。

PS。我希望你在Linux上,这是一个学习编程的非常好的平台。