我正在编写一个程序来处理用户的选项和使用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'
是默认设置,但有哪些方法可以修改或不包含它?并且还可以访问用户指定的选项?
答案 0 :(得分:0)
来自getopt的手册片段:
如果getopt()无法识别选项字符,则会输出 向stderr发送错误消息,将该字符存储在optopt中,然后返回 &#39;&#39 ;.调用程序可以通过设置来防止错误消息 opterr为0。
您需要做什么:
#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;
}
}
}