[英]Checking if command line input is valid integer (C)
我正在尝试验证程序的用户是否在命令行中输入了有效的整数。 我遇到了一个问题:它拒绝所有输入。
这就是我所拥有的
// Make sure input is a valid int
char *ptr = NULL;
long int input = strtol(argv[i+1], &ptr, 10);
if(ptr == NULL){
userMinInt = input;
minIntSet = true;
}
else
fprintf(stderr, "You must enter a valid integer for <min-int>. Using default value of %ld\n", minInt);
代码正在检查端点指针是否为NULL
。 相反,代码应检查:
1)端点指针是否指向空字符'\\0'
?
2)终点指针是否与起点不同?
以下是其他检查:
char *start = argv[i+1]; // maybe should be argv[i]
char *ptr;
// set errno to 0 for subsequent check
errno = 0;
long int input = strtol(start, &ptr, 10);
if (ptr == start) {
fprintf(stderr, "No conversion done.\n");
}
else if (*ptr != 0) {
fprintf(stderr, "Extra data after the number.\n");
}
else if (errno) {
fprintf(stderr, "Number outside long range.\n");
}
else if (input < INT_MIN || input > INT_MAX) {
fprintf(stderr, "Number %ld outside int range.\n", input);
}
else {
printf("Number is %d.\n", (int) input);
}
感谢彼得,我解决了这个问题。 这是新的工作代码:
// Make sure input is a valid int
char *ptr = NULL;
long int input = strtol(argv[i+1], &ptr, 10);
if(ptr != NULL && *ptr == (char)0){
userMinInt = input;
minIntSet = true;
}
else
fprintf(stderr, "You must enter a valid integer for <min-int>. Using default value of %ld\n", minInt);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.