如何验证用户是否只从命令行向getopt选项传递了整数值?用户应只传递正整数值。
Isdigit()函数在这里不能正常工作。

                case 's' :
                    flags=1;

                    start = atoi(optarg);

如何检查start是否只包含整数值?
                ./prog -scf

默认情况下,当输入任何字符时,它的s值为0,因为我使用的是atoi函数,但在这里,当传递cf时,它应该会给出错误。
甚至试过strtol(),但没有用
            start = (int) strtol(optarg, &ptr, 10);

即使我使用strtol()函数,它也只能在数字和字符串都被传递的情况下工作。
            eg ./prog -s5abc        --> this works

            eg  ./prog -sabc         -->does not work

这里再次开始采取0值,因为只有宪章是通过的!但是,如果用户本身通过了0,那么我如何处理错误呢?
           eg ./prog -s0        --> s takes 0 value, valid

           eg  ./prog -sabc     --> s takes 0 value , but invalid

最佳答案

当您使用带符号的数字时,应该这样做:

if (optarg[0] != '-' && (optarg[0] < '0' || optarg[0] > '9'))
    *error handling*
for (size_t i = 1; optarg[i] != 0; i++)
    if (optarg[i] < '0' || optarg[i] > '9')
        *error handling*

关于c - 整数值和负值的getopt错误处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43862851/

10-11 20:56