program story

switch 문에서 continue 사용

inputbox 2020. 11. 2. 07:56
반응형

switch 문에서 continue 사용


switch중간 에서 다음 코드의 루프 문 으로 건너 뛰고 싶습니다 .

while (something = get_something())
{
    switch (something)
    {
    case A:
    case B:
        break;
    default:
        // get another something and try again
        continue;
    }
    // do something for a handled something
    do_something();
}

이것이 유효한 사용 방법 continue입니까? continue진술 진술에서 무시 switch됩니까? 여기서 C와 C ++의 동작이 다른가요?


괜찮습니다. continue문은 둘러싸는 루프와 관련이 있으며 코드는 다음과 같아야합니다 (이러한 점프 문을 피함).

while (something = get_something()) {
    if (something == A || something == B)
        do_something();
}

그러나 break귀하의 의견이 제안한 것처럼 루프를 종료하려면 (거짓으로 평가 될 때까지 항상 다른 무언가로 다시 시도합니다) 다른 구조가 필요합니다.

예를 들면 :

do {
    something = get_something();
} while (!(something == A || something == B));
do_something();

예, 괜찮습니다 if. 성명서 에서 사용하는 것과 같습니다 . 물론 a break사용 하여 스위치 내부에서 루프를 벗어날 수는 없습니다 .


예, 계속은 switch 문에 의해 무시되고 테스트 할 루프의 조건으로 이동합니다. Ritchie의 C 프로그래밍 언어 참조에서 발췌 한 내용을 공유하고 싶습니다.

continue문은와 관련이 break있지만 덜 자주 사용됩니다. 이는 둘러싸 forwhile, 또는 do루프 의 다음 반복이 시작되도록합니다. 으로 while하고 do,이 수단은 테스트 부분은 즉시 실행된다; 에서 for제어는 증분 단계로 전달됩니다.

continue 문은 문이 아닌 루프에만 적용됩니다 switch. continue내부 a를 switch루프 내부는 다음 루프 반복됩니다.

C ++에 대해서는 잘 모르겠습니다.


구문 론적으로 정확하고 문체 적으로 괜찮습니다.

좋은 스타일은 모든 case:문장이 다음 중 하나로 끝나야합니다.

 break;
 continue;
 return (x);
 exit (x);
 throw (x);
 //fallthrough

또한 case (x):즉시

 case (y):
 default:

허용됨-정확히 동일한 효과를 가진 여러 케이스를 번들로 묶습니다.

다른 건처럼, 실수로 의심되는 if(a=4){...}물론 당신이 루프 (둘러싸 필요 while, for, do...while에 대한) continue작업이다. case()혼자로 돌아 가지 않습니다 . 그러나 다음과 같은 구조입니다.

while(record = getNewRecord())
{
    switch(record.type)
    {
        case RECORD_TYPE_...;
            ...
        break;
        default: //unknown type
            continue; //skip processing this record altogether.
    }
    //...more processing...
}

...괜찮아.


기술적으로는 유효하지만 이러한 모든 점프는 제어 흐름, 특히 continue문장을 모호하게 만듭니다.

나는 그러한 트릭을 첫 번째가 아닌 최후의 수단으로 사용할 것입니다.

어때

while (something = get_something())
{
    switch (something)
    {
    case A:
    case B:
        do_something();
    }        
}

더 짧고 더 명확한 방식으로 작업을 수행합니다.


Switch는 루프로 간주되지 않으므로 switch의 case 문 내에서 Continue를 사용할 수 없습니다 .

참고URL : https://stackoverflow.com/questions/2146763/using-continue-in-a-switch-statement

반응형