[英]Check if a command line argument is an integer
I have to check if given argument is integer or not. 我必须检查给定的参数是否为整数。 I can't use [] and memory allocation, i tried using isdigit(); 我不能使用[]和内存分配,我尝试使用isdigit(); but its not working for me. 但它对我不起作用。 Thanks for any advices and help. 感谢您的任何建议和帮助。
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;
}
It should show "Incorrect input" and return 1 if one of numbers aren't integer, but when i'm using isdigit everytime programs prints "Incorrect input" even when all numbers are integers. 它应该显示“ Invalid input”,如果其中一个数字不是整数,则返回1,但是当我使用isdigit时,即使所有数字都是整数,每次程序也会打印“ Invalid input”。
to check if given argument is integer or not. 检查给定参数是否为整数。
Use strto*()
family of functions. 使用strto*()
系列函数。 @Some programmer dude @一些程序员哥们
Example: Test if int
? 示例:测试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;
}
}
Research strtol()
for more details. 研究strtol()
以获得更多详细信息。
Alternatively one could simply look for an optional sign followed by digits if any integer is OK, even big ones. 另一种方法是,如果有整数,即使是大整数,也可以简单地寻找一个可选的符号,后跟数字。
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))
should generate a warning. atoi(*(argv+i))
应生成警告。 Enable all warnings to save time. 启用所有警告以节省时间。 atoi()
expects a pointer to a string. atoi()
需要一个指向字符串的指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.