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
있지만 덜 자주 사용됩니다. 이는 둘러싸for
는while
, 또는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();
}
}
더 짧고 더 명확한 방식으로 작업을 수행합니다.
답변
이것은 메가 비트에서 늦을 수 있지만 사용할 수 있습니다 continue 2
.
일부 PHP 빌드 / 구성은 다음 경고를 출력합니다.
PHP 경고 : “계속”타겟팅 스위치는 “중단”과 동일합니다. “계속 2″를 사용하려고 하셨나요?
예를 들면 :
$i = 1;
while ($i <= 10) {
$mod = $i % 4;
echo "\r\n out $i";
$i++;
switch($mod)
{
case 0:
break;
case 2:
continue;
break;
default:
continue 2;
break;
}
echo " is even";
}
그러면 다음이 출력됩니다.
out 1
out 2 is even
out 3
out 4 is even
out 5
out 6 is even
out 7
out 8 is even
out 9
out 10 is even
PHP 5.5 이상에서 테스트되었습니다.
답변
Switch는 루프로 간주되지 않으므로 switch의 case 문 내에서 Continue를 사용할 수 없습니다 .