2017-11-29 4 views
-4
main() 
{ 
int i=2,j=0; 
switch(3) 
{ 
case 0: while(i) 
     { 
      case 1:j++; 
      case 2:j++; 
      case 3:j++; 
       i--; 
      } 
} 

} 

//상수는이 코드를 실행하려고 다음 방법, 어떤 경우 상수에 일치되지

일정한 어떤 경우에 mathing되지 상수가 없기 때문에 스위치가 여기 작업을 진행하는 방법
+0

[The Definitive C Book Guide and List] (// stackoverflow.com/q/562303) –

+1

이 코드는 어디서 났습니까? 귀하의 질문은 무엇인가? 아마도 [도움말 페이지] (http://stackoverflow.com/help), 특히 [여기에 관해서 내가 물을 수있는 주제는 무엇입니까?] (http://stackoverflow.com/help) 섹션을 읽는 것이 좋습니다. 도움말/on-topic) 및 [[어떤 유형의 질문을하지 않아야합니까?]] (http://stackoverflow.com/help/dont-ask)를 참조하십시오. 또한 [둘러보기] (http://stackoverflow.com/tour)와 [좋은 질문을하는 방법에 대해 읽어보십시오.] (http://stackoverflow.com/help/how-to-ask). –

+0

나는 개봉 된 것을 이해하지 못하지만 개봉보다 더 많은 중괄호를 사용하고 있습니다. 또한 다른 블록 안에 케이스를 넣지 마십시오. 여기는 while 블록입니다. – Ordoshsen

답변

0

case 레이블은 switch 문에서 사용되는 레이블 일뿐입니다. 일반 레이블의 경우 대소 문자 레이블을 대체하는 코드와 switch 문을 goto 문에 대한 상수 표현식으로 다시 쓸 수 있습니다. 실제로 사용되지 않았기 때문에 일부 레이블에 주석을 달았습니다.

#include <stdio.h> 

int main(void) 
{ 
    int i = 2, j = 0; 

    goto L3; 

    /*L0:*/ 

    while (i) 
    { 
     /*L1:*/ j++; 
     /*L2:*/ j++; 
     L3: j++; 
     i--; 
    } 

    printf("j = %d\n", j); 

    return 0; 
} 

프로그램 출력

j = 4 

는 그래서 goto 문은 while 문 내부 (케이스) 라벨 L3와 문에 제어를 전달한다. 그리고이 while 문은 두 번의 반복을 수행합니다. 주석을 달지 않은 다른 모든 레이블은 무시됩니다.

+0

모스크바의 @ 블라드에게 감사드립니다. 그러나 goto 문을 사용하지 않으면 어떻게 될까요? –

+0

@AKASHTOMAR 같은 일이 일어납니다. –

관련 문제