Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C If语句检查argv是否为数字_C_If Statement_G++_Argv - Fatal编程技术网

C If语句检查argv是否为数字

C If语句检查argv是否为数字,c,if-statement,g++,argv,C,If Statement,G++,Argv,我的程序中有一个if语句,它应该检查启动程序时输入的参数。例如/a.out 2+0 x(如果有人能用英语为这种类型的输入参数写下合适的名称,我将不胜感激 我的if语句应该检查输入的参数是否不是数字: if(atof(argv[cnt]) == 0 && argv[cnt] != "0") 但是当argb[cnt]=0时,这是正确的,这是不幸的(用GDB检查) 我做错了什么以及如何修复它?您可以在C(或fordouble-s)中使用它来管理结束指针: char* end = NU

我的程序中有一个
if
语句,它应该检查启动程序时输入的参数。例如
/a.out 2+0 x
(如果有人能用英语为这种类型的输入参数写下合适的名称,我将不胜感激

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

if(atof(argv[cnt]) == 0 && argv[cnt] != "0")
但是当argb[cnt]=0时,这是正确的,这是不幸的(用GDB检查) 我做错了什么以及如何修复它?

您可以在C(或for
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);
您也可以使用和
%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);
顺便说一句,如果您需要比较字符串,请使用。
argv[cnt]!=“0”
正在比较地址,我相信在您(或我的)系统上,它总是正确的(即使对于
0
程序参数),因为程序参数在中,而文字字符串在中

如果您正在编写代码,请了解(它会按照您的想象进行),也许

不要忘记使用所有警告和调试信息进行编译(
gcc-Wall-Wextra-g
),然后使用调试器(
gdb


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

argv[cnt]!=“0”
毫无意义。你根本没有检查它的值。你不能用C来比较字符串。它比较指针,在这种情况下指针总是不同的。参数是“算术表达式”或“反向波兰符号”在失败时,如OP所说的“数字”,输入可能是“.1”。