2013-03-06 9 views
12

일부 특별한 경우가 감지되면 switch 명령문을 사용하여 주 기능에서 일찍 복귀합니다. 특별한 경우는 아래와 같이 enum 유형을 사용하여 인코딩됩니다. 나는이 프로그램을 실행할 때 이상하게도 switch 문에서 enum 유형 사용

typedef enum { 
    NEG_INF, 
    ZERO, 
    POS_INF, 
    NOT_SPECIAL 
} extrema; 

int main(){ 

    // ... 

    extrema check = POS_INF; 

    switch(check){ 
     NEG_INF: printf("neg inf"); return 1; 
     ZERO: printf("zero"); return 2; 
     POS_INF: printf("pos inf"); return 3; 
     default: printf("not special"); break; 
    } 

    // ... 

    return 0; 

} 

는 문자열 not special는 콘솔에 인쇄 및 주요 기능의 나머지는 실행을 계속한다.

여기 스위치 문이 제대로 작동하려면 어떻게해야합니까? 감사!

답변

16

아니요 case 레이블. 이제 goto 개의 라벨이 있습니다. 시도 :

switch(check){ 
    case NEG_INF: printf("neg inf"); return 1; 
    case ZERO: printf("zero"); return 2; 
    case POS_INF: printf("pos inf"); return 3; 
    default: printf("not special"); break; 
} 
+1

!! 나는 그것을 보았어 야했지만 나는 그렇게하지 않았다. 당신이 과거를 읽을 수 있고 예고하지 못하는 것을 놀라게합니다. – zwol

+0

오. 나의. 하나님. 저는 Verilog에 너무 익숙해졌습니다. 나는 그것에 대해 잊어 버렸습니다. 이 C 코드는 필자가 가지고있는 Verilog 프로젝트의 기능적 시뮬레이션이다. –

+0

정말 고마워요! 대답 해 주시면 최대한 빨리 대답하겠습니다 ..... –

1

당신은 case 모든 중요한을 놓치고 :

switch(check){ 
    case NEG_INF: printf("neg inf");  return 1; 
    case ZERO: printf("zero");  return 2; 
    case POS_INF: printf("pos inf");  return 3; 
    default:  printf("not special"); break; 
} 

당신은 당신의 열거 상수와 같은 이름을 가진 일부 (사용되지 않는) 레이블을 생성 (이 컴파일 된 이유입니다).

2

키워드 "case"를 사용하지 않았습니다. 아래 주어진 버전은 정상적으로 작동합니다.

typedef enum { 
    NEG_INF, 
    ZERO, 
    POS_INF, 
    NOT_SPECIAL 

} extrema; 

int main(){ 

    extrema check = POS_INF; 

    switch(check){ 
     case NEG_INF: printf("neg inf"); return 1; 
     case ZERO: printf("zero"); return 2; 
     case POS_INF: printf("pos inf"); return 3; 
     default: printf("not special"); break; 
    } 

    return 0; 

}