如何验证用户是否只从命令行向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/