如何验证用户是否仅通过命令行将整数值传递给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
答案 0 :(得分:0)
当您使用已签名的号码时,应该这样做:
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*