当我不写参数时,我遇到了问题,我希望这些参数是必不可少的。
while ((choice = getopt(argc, argv, "a:b:")) != -1) {
switch (choice) {
case 'a' :
printf("a %s\n", optarg);
break;
case 'b' :
printf("b %d\n", optarg);
break;
case '?' :
if (optopt == 'a')
fprintf (stderr, "Option -%c requires an argument.\n", optopt);
break;
}
}
当我写./a.out -b test
时,我看不到fprintf()
消息
答案 0 :(得分:0)
假设你{w} printf()
时的意思是fprintf()
:
我可能错了,但据我记得optarg
为char *
所以你应该在第二个%s
使用printf()
。
如果您真的想要fprintf()
,请解释您希望看到它的原因。
答案 1 :(得分:0)
因为fprintf
处于这种情况if (optopt == 'a')
,当optopt为'b'
if (optopt == 'a')
fprintf (stderr, "Option -%c requires an argument.\n", optopt);
break;
试
if (optopt == 'a' || optopt == 'b' )
fprintf (stderr, "Option -%c requires an argument.\n", optopt);
break;
答案 2 :(得分:0)
我认为您需要跟踪是否自己使用了选项-a
- getopt()
没有足够丰富的规范来捕获该信息。类似的东西:
int opt_a_found = 0;
while ((choice = getopt(argc, argv, "a:b:")) != -1) {
switch (choice) {
case 'a' :
opt_a_found = 1;
printf("a %s\n", optarg);
break;
case 'b' :
printf("b %d\n", optarg);
break;
case '?' :
if (optopt == 'a')
fprintf (stderr, "Option -%c requires an argument.\n", optopt);
break;
}
}
if (!opt_a_found) {
fprintf (stderr, "Option -a is required.\n");
}