1
기본적으로 입력 a와 b 다음에 숫자를 찾고 있는데 추가 정보없이 c와 d를 찾고 있습니다. 그러나 getopt를 사용하여이 작업을 수행하려고하면 루프가 실행되지 않습니다.getopt를 사용하여 C에서 입력 내용을 구문 분석하려고 시도했습니다.
컴파일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' case를 생략하십시오. –
글쎄요, 잘 모르겠지만'$ prog1 -a 1 - b 2 ', 특정 시퀀스? –