使用getopt访问命令行用户参数
Access to command line user arguments using getopt
我正在编写一个程序,处理来自用户的选项和使用getopt编程的功能。我的问题是,如果用户输入一个无效的选项,我如何显示一个错误?此外,我想访问变量,以便在错误消息中显示它。这是我的代码的快照:
#include <unistd.h>
#include <iostream>
int main(int argc, char **argv)
{
enum {
WHOLE, PREFIX, ANYWHERE, SUFFIX, EMBEDDED
} mode;
bool reverse_match = false;
bool ignore_case = false;
bool specify_length = false;
int c;
while ((c = getopt(argc, argv, "wpsavein:")) != -1) {
switch (c) {
case '?':
std::cerr << "Unrecognised option " << std::endl;
std::cerr << "Usage: match [-OPTION]... PATTERN [FILENAME]..." << std::endl;
return 2;
break;
case 'w': // pattern matches whole word
mode = WHOLE;
break;
case 'p': // pattern matches prefix
mode = PREFIX;
//cout << "test: " << optarg << endl;
break;
case 'a': // pattern matches anywhere
mode = ANYWHERE;
break;
case 's': // pattern matches suffix
mode = SUFFIX;
break;
case 'v': // reverse sense of match
reverse_match = true;
break;
case 'e': // pattern matches anywhere
mode = EMBEDDED;
break;
case 'i': // ignore case
ignore_case = true;
break;
case 'n': // specifies length of match
specify_length = true;
}
}
}
我使用cerr
流来显示错误,但我希望它也包括用户输入。例如,如果用户输入-t
,错误将是:
Unrecognised option -t
Usage: match [-OPTION]... PATTERN [FILENAME]...
我得到的是:
invalid option -- 't'
Unrecognised option -t
Usage: match [-OPTION]... PATTERN [FILENAME]...
我相信invalid option -- 't'
是默认的,但是有一种方法我可以修改或不包括它?还可以访问用户指定的选项?
来自getopt:
的手册片段如果getopt()不识别选项字符,它打印一个错误消息到stderr,将字符存储在optopt中,并返回' ? '。调用程序可以通过设置来阻止错误消息
你需要做的:
#include <unistd.h>
#include <iostream>
int main(int argc, char **argv) {
opterr = 0;
int c;
while ((c = getopt(argc, argv, "wpsavein:")) != -1) {
switch (c) {
case '?':
std::cerr << "Unrecognised option -" << static_cast<char>(optopt)
<< std::endl;
std::cerr << "Usage: match [-OPTION]... PATTERN [FILENAME]..."
<< std::endl;
return 2;
break;
}
}
}
相关文章:
- 使用用户定义的参数调用future/async并调用类方法
- 参数包构造函数在类模板中隐藏用户定义的转换
- 用户输入作为参数C++
- 如何设置默认参数以防用户不输入另一个参数
- 在未显式传递参数时默认使用 lambda 的用户输入
- 如何防止用户指定函数模板参数,迫使其进行推导
- 如何对多个模板参数使用用户定义的推导指南
- 读取用户必须提供一些参数的文件
- 使用用户定义的转换运算符推导函数模板参数
- 用户定义的转换不适用于可变参数函数参数?为什么不呢?
- 用户指定的参数,用于确定在大循环中调用哪个函数
- 有没有办法根据用户参数设置函数指针?
- 指定在用户固定我的应用程序时用于运行应用程序的命令参数
- 用户定义的构造函数重载与参数超类的重载不匹配
- 作为传递给 CPP 类构造函数的参数的用户定义函数
- 需要*在*用户参数之前推导参数的模板参数
- 将用户参数称为函数名称及其参数
- 无法在后台减法器MOG2中设置用户参数
- c++:当回调不提供用户参数时如何获取上下文?
- 使用getopt访问命令行用户参数