gpt4 book ai didi

检查命令行参数是否为整数

转载 作者:行者123 更新时间:2023-11-30 14:37:03 25 4
gpt4 key购买 nike

我必须检查给定的参数是否为整数。我无法使用 [] 和内存分配,我尝试使用 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 时,即使所有数字都是整数,程序也会打印“输入错误”。

最佳答案

to check if given argument is integer or not.

使用strto*()系列函数。 @Some programmer dude

示例:测试是否int

bool is_int(const char *arg) {
char *endptr;
errno = 0;
long value = strtol(arg, &endptr, 10);

// Various tests, adjust as desired.

if (arg == endptr) return false; // no conversion occurred.
if (errno == ERANGE) return false; // outside `long` range
if (value > INT_MAX || value < INT_MIN) return false; // outside `int` range
if (*endptr != '\0') return false; // Extra junk at end

return true;
}



for (i=1; i<argc; i++) {
if (!is_int(argv+i)) {
printf("Incorrect input\n");
return 1;
}
}

研究strtol()了解更多详情。

<小时/>

或者,如果任何整数都可以,即使是大整数,也可以简单地查找可选符号后跟数字。

bool is_integer(const char *arg) {
if (*arg == '-' || *arg == '+') arg++;

bool digit_found = false;
while (isdigit((unsigned char) *arg)) {
arg++;
digit_found = true;
}

return *arg == '\0' && digit_found;
}
<小时/>

atoi(*(argv+i)) 应该生成警告。启用所有警告以节省时间。 atoi() 需要一个指向字符串的指针。

关于检查命令行参数是否为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57646718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com