【发布时间】:2019-08-25 22:27:29
【问题描述】:
我必须检查给定的参数是否为整数。我不能使用 [] 和内存分配,我尝试使用 isdigit();但它不适合我。 感谢您的任何建议和帮助。
int main(int argc, char *argv[]) {
int sum=0, i;
if(argc<2)
{
printf("Not enough arguments");
return 9;
}
for (i=1; i<argc; i++)
{
if (!isdigit(atoi(*(argv+i))))
{
printf("Incorrect input");
return 1;
}
}
for(i=1; i<argc; i++)
{
sum+=atoi(*(argv+i));
}
printf("%d", sum);
return 0;
}
如果其中一个数字不是整数,它应该显示“输入错误”并返回 1,但是当我使用 isdigit 时,即使所有数字都是整数,每次程序都会打印“输入错误”。
【问题讨论】:
-
isdigit作用于字符。您应该在调用atoi()之前调用它(因为您不想使用非数字字符调用atoi())。 -
使用
strtol进行转换,验证是内置的。 -
另外,对于任何指针或数组
p和索引i,表达式*(p + 1)完全等于p[i]。后者通常更容易阅读和理解,而且写起来也少一些。
标签: c validation command-line-arguments