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(或fordouble
-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”。