现在,我正在实现两个标志, - save和--load。最终,他们将为一个流氓手段处理保存和加载地下城文件,但是现在我只想让他们做一些事情。这是我的代码的相关部分,来自main。
static struct option long_options[] = {
{"load", no_argument, &load_flag, 1},
{"save", no_argument, &save_flag, 1},
{0,0,0,0},
};
while((c = getopt_long(argc, argv, "f", long_options, NULL)) != -1) {
break;
}
if(load_flag == 1) {
printf("hey, the load flag works \n");
}
if(save_flag == 1) {
printf("And the save flag works as well! \n");
}
根据我的理解,来自while语句的条件实际应该设置标志。但是,code i adapted it from还包含一个具有必需元素的选项,因此它有一个switch语句和一个optstring参数。我试图修改代码以适应我的情况,但在翻译中丢失了一些东西。我还必须在getopt_long中保留optstring参数,即使它在我的代码中没有做任何事情。
当我运行修改后的代码时, - 或者 - 或 - 运行,但如果我同时使用它们,它只会注册输入的第一个。不幸的是,我的规格说两者都可以同时使用,所以我们就是这样。
我的问题如下。
为什么只分配第一个标志,我需要做些什么来解决它?
是否与离开optstring参数有关" f"在getopt_long中满足编译器?这是错误的做法吗?
答案 0 :(得分:1)
break
在第一次迭代后停止while
循环,因此它只检查第一个选项。我猜你最初在那里有一个switch
语句,因此break
用于退出switch
并继续while
循环。由于您没有switch
,因此应该使用空的while
循环。
其他问题:
"f"
选项,则不应传递-f
。'?'
返回值,该值表示何时使用了未知选项。