我想使用getopt()来解析命令行提供的参数,但是我遇到了非常简单的测试用例的问题。我有以下代码(几乎,但不完全相同,作为POSIX standard definition中的示例提供的代码。)
int main(int argc, char *argv[]) {
int c;
int rmsflg = 0, saflg = 0, errflg = 0;
char *ifile;
char *ofile;
//Parse command line arguments using getopt
while (((c=getopt(argc,argv, ":i:rso:")) != 1) && (errflg == 0)) {
switch(c){
case 'i':
ifile="optarg";
break;
case 'o':
ofile="optarg";
break;
case 'r':
if (saflg)
errflg++;
else {
rmsflg++;
printf("Root Mean Square averaging selected\n");
}
break;
case 's':
if (rmsflg)
errflg++;
else {
saflg++;
printf("Standard Arithmetic averaging selected\n");
}
break;
case ':':
fprintf(stderr,"Option -%c requires an argument\n",optopt);
errflg++;
break;
case '?':
fprintf(stderr,"Option -%c is not a valid option\n",optopt);
errflg++;
break;
default:
fprintf(stderr,"The value of c is %c,\
the option that caused this error is -%c\n",c,optopt);
errflg++;
break;
}
}
if (errflg) {
fprintf(stderr, "usage: xxx\n");
exit(2);
}
return 0;
}
首先,当我没有默认情况时,不会输出任何内容。当我插入默认大小写并使其输出c
具有的值时,我得到?
。由于两个原因,这很奇怪。首先,这就是最困扰我的原因,为什么c
不会匹配专门为匹配此输出而编写的?
案例,而是直接转到default
案例。其次,optopt
的输出是(对于我的输入)o
。仅当提供的选项与 optstring 中的任何字符都不匹配时,才会返回?
字符。
答案 0 :(得分:5)
在while
循环条件中,您应该检查getopt的返回值,而不是1.然后,如果在命令行上传递选项-?
,则应该识别它。