使用getopt时是否有内置的方法使参数依赖于另一个?例如,我有我的开关案例设置,一切正常,但我在读取文本文件(-i)之前需要我的-m参数(马尔可夫链的长度)。
换句话说,我想确保在处理我的输入arg时没有设置其他参数。
小摘录:
while ((opt = getopt_long(argc, argv, "i:shm:", long_options, &option_index))
!= -1)
{
switch (opt) {
case 'i':
inputEnglish.ReadFile((string)optarg);
break;
case 'm':
inputEnglish.setMarkovLength(atoi(optarg));
break;
case 's':
break;
case 'h':
printHelp();
break;
case '?':
cout << "dfgdfgdf" << endl;
return 0;
break;
default:
printHelp();
return 0;
break;
}
}
如果没有任何内置方式,你有干净的方法吗?清洁代码比效率更重要。谢谢你的帮助!
答案 0 :(得分:1)
保存文件名,仅在处理完所有命令行参数后对其进行处理。这通常是最好的方法 - getopt代码应该只解析而不是处理。
或者,这是大多数命令工作的方式,不要使用文件名的标志...所以用法是pgm -m foo filename。然后,在处理完所有标志后,只需将剩余的参数(argv [optind]到argv [argc-1])作为文件名处理。这有助于像您一样处理文件的常见情况,具体取决于标志值。