【发布时间】:2013-11-03 22:37:08
【问题描述】:
当我在其他选项之前有一个非选项时,基本上 getopt 会返回 -1。
n = atoi(argv[1]);
while ((opt = getopt(argc, argv, "hi:o:")) != -1) {
switch (opt) {
case 'i':
ifile = optarg;
break;
case 'o':
ofile = optarg;
break;
case 'h':
printf("...");
break;
default:
printf("Invalid Option\n");
exit(0);
}
}
示例:
./a.out 22 -i infile -o outfile
这使得 getopt 返回 -1 并且 switch 语句永远不会被执行。
./a.out -i infile -o outfile
但是这可行,但我真的希望第一个选项只是一个数字,而不必包含另一个选项。
我认为 getopt 应该处理这种情况,但我可能错了。任何帮助表示赞赏!
【问题讨论】:
-
这就是它应该工作的方式。选项在遇到第一个非选项时结束——从那时起的所有内容都应该是文件名。
-
处理乱序参数是 GNU 扩展,而不是 Posix。确保不要在任何地方强制执行“严格 Posix”模式。
-
你为什么不做
a.out -i infile -o outfile 22? -
@Barmar 很有趣,我不知道它应该如何工作。我想我会接受你的建议。