【发布时间】:2015-03-25 19:53:51
【问题描述】:
好的,所以基本上我正在寻找输入 a 和 b 之后的数字,并且我正在搜索 c 和 d,而不需要额外的信息。但是,当我尝试使用 getopt 执行此操作时,我的循环永远不会执行。下面是一些示例代码:
int aa = 0;
int av = 0;
int ab = 0;
int bv = 0;
int ac = 0;
int cord = 0;// no c or d = 0, c = 1, d = 2
//flags and a/b value holders
int getoptvalue = 0;
printf("starting getopt\n");
while((getoptvalue = getopt(argc,argv,"cda:b:")) != -1){
printf("inside getopt\n");
switch(getoptvalue){
case a:if(aa||ab){
exit(1);
}
else{
aa = 1;
av = atoi(optarg);//takes int value following 'a' for storage in av?
}break;
case b:if(ab){
exit(1);
}
else{
ab = 1;
bv = atoi(optarg);//takes following int value for storage?
}break;
case c:if(ac){
exit(1);
}
else{
ac = 1;//c/d switch
cord = 1; // showing c was reached
}break;
case d:if(ac){
exit(1);
}
else{
ac = 1;
cord = 2; //showing d was reached
}break;
default: break;
}
printf("done.\n");
}
编译后,此代码打印:
$prog1 a1 b2 开始 getopt 完成。
它显然没有运行循环,因为它从不打印“内部 getopt”,但我不知道为什么。有什么想法吗?
【问题讨论】:
-
如果我遗漏了什么,我很抱歉,但是是
case a还是case 'a'? -
default: break;default 的情况 -
嗯,我不太确定,但您是否尝试过类似
$prog1 -a 1 -b 2的特定顺序? -
在开关中省略默认值是您与下一个人的意图的风格/沟通问题。
-
原来是输入参数。谢谢!
标签: c parsing arguments getopt getopt-long