检查命令行参数时出错

时间:2018-03-18 10:47:40

标签: c integer

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>


int main(int argc, char **argv) {

    char * requiredi = argv[1];
    int arg1 = atoi(requiredi);


    if (arg1 < 0) {

        fprintf(stderr, "Not positive integer\n");

    }

    if (isdigit(arg1) == 0) {

        fprintf(stderr, "Not an integer\n");

    }


    return 0;

}

我希望我的参数不是一个正整数(0不是我程序的正整数)。我还想确保它只接受一个整数:如果看到类似45abc的内容,它会显示错误。

1 个答案:

答案 0 :(得分:1)

请注意,您应确保在传递argv[1]之前将atoi()传递给int,并且isdigit()也不会告知数字是否为数字,strtol() 1}}始终为intisdigit()允许您确定给定字符是数字字符的枯萎,即集合 [0-9] 的字符。< / p>

要检查您的字符串 - 传递的命令行参数 - 是否为数字,您应该使用{{3}}而不是atoi(),这与atoi()不同strtol()您可以检查输入字符串是否是有效整数的表示,示例

int
main(int argc, char **argv)
{
    int value;
    char *endptr;
    if (argc < 2) {
        fprintf(stderr, "too few command line arguments\n");
        return EXIT_FAILURE;
    }
    value = strtol(argv[1], &endptr, 10);
    if (*endptr != '\0') {
        fprintf(stderr, "invalid argument `%s' is not numeric\n", argv[1]);
        return EXIT_FAILURE;
    }
    fprintf(stdout, "Ok, value converted: %d\n", value);
    return EXIT_SUCCESS;
}