尝试使用getopt解析c中的输入
Posted
技术标签:
【中文标题】尝试使用getopt解析c中的输入【英文标题】:Trying to use getopt to parse input in c 【发布时间】: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
的特定顺序?
在开关中省略默认值是您与下一个人的意图的风格/沟通问题。
原来是输入参数。谢谢!
【参考方案1】:
我已经修改了你的代码,现在看起来像这样
#include<stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc,char* argv[])
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");
return 0;
现在当我编译这段代码并按以下方式运行时
gcc test.c
./a.out -a a -b b
starting getopt
inside getopt
done.
inside getopt
done.
inside getopt
【讨论】:
以上是关于尝试使用getopt解析c中的输入的主要内容,如果未能解决你的问题,请参考以下文章