gpt4 book ai didi

c - 在 C 中使用 getopt 的问题

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:54 24 4
gpt4 key购买 nike

我想使用 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;
}

首先,当我没有 default case 时,没有任何输出。当我插入默认大小写并使其输出 c 的值时,我得到了 ?。这很奇怪,有两个原因。首先,这是最让我困扰的,为什么 c 不匹配 ? 专门为匹配此输出而编写的案例,而是直接跳转到 默认大小写。其次,optopt 的输出是(对于我的输入)o? 字符仅在提供的选项不匹配 optstring 中的任何字符时返回。

最佳答案

while 循环条件中,您应该检查 getopt 的返回值是否为 -1 而不是 1。然后如果您在命令行上传递选项 -?,它应该得到认可。

关于c - 在 C 中使用 getopt 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com