作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用 getopt 时,是否有一种内置方法可以使一个参数依赖于另一个参数?例如,我有我的 switch case 设置并且一切正常,但在我读取文本文件 (-i) 之前我需要我的 -m 参数(马尔可夫链的长度)。
换句话说,我想确保在处理我的输入参数时没有设置其他参数。
小摘录:
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;
}
}
如果没有任何内置方法,您是否有一种干净的方法来执行此操作?干净的代码在这里比效率更重要。感谢您的帮助!
最佳答案
保存文件名,只有在处理完所有命令行参数后才处理它。这通常是最好的方法——getopt 代码应该只解析,而不是处理。
或者,这是大多数命令的工作方式,不要为文件名使用标志...所以用法是 pgm -m foo 文件名。然后,在处理完所有标志后,您只需将剩余的参数(argv[optind] 到 argv[argc-1])作为文件名进行处理。这有利于根据标志值处理文件的常见情况(如您的情况)。
关于c++ - getopt 参数取决于另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22163106/
我是一名优秀的程序员,十分优秀!