반응형

 C언어에서 continue문은, 반복문 블록에 있을 때, continue 밑에 있으면서, 반복문 블록에 있는 문장들은 무시합니다. 이게 대체 무슨 소리인지 잘 모르겠군요. 쉽게 말해, 루프의 끝으로 이동한다고 보시면 됩니다. 당연하게도 for나, while이나, do while 같은 반복문 내부에서만 쓰일 수 있어요. 대충 이런 식으로 for loop가 있다고 해 봅시다.

 

 

for(문장1;조건1;문장2){문장3; continue; 문장 4}

 

 

 보시면 문장 3 다음에 오늘 배울 키워드가 왔습니다. 그리고 밑에 문장 4가 왔는데요. 블록 안에 있는 문장은 3개입니다. 이 중, continue문을 만났을 때, 이 밑에 있는 문장 4가 무시되고, 문장 2가 수행됩니다. 즉, 조건1, 문장3, 문장2 순으로 수행이 됩니다.

 

 


 예제 프로그램을 봅시다.

 

 

 실행 결과는 어떻게 나올까요?

 

 

 만약에 컨티뉴가 없었다면, 이런 식으로 수행 흐름도를 그릴 수 있을 겁니다. 그런데, 7번째 줄에 그 문장이 있습니다. for문 블록에 걸려진 문장은, 7번째 줄과 8번째 줄에 걸려 있는 문장인데요.

 

 

 여기에 도달하면, 초록색으로 표시된 sentence는 무시됩니다. 무시되고, i = i+1으로 넘어갑니다.

 

 

 따라서, 루프를 돌 때 까지 num이 1 증가하는 현상은 일어나지 않습니다. 실행 결과는 0이 나오겠네요.

 

 


 r행 c열로 이루어져 있는 맵이 있다고 해 봅시다. 그러면 (0,0)에서부터 (r-1,c-1)까지가 vaild한 영역일 겁니다. 상, 하, 좌, 우로만 탐색을 한다고 해 봅시다.

 

 

 그러면, 우리는 아랫쪽, 오른쪽, 위쪽, 왼쪽을 다음과 같이 나타낼 수 있을 겁니다. dx[i]는 수직 방향 변화량, dy[i]는 수평 방향 변화량을 의미합니다.

 

 

 (tx,ty)는 (x,y)와 인접한 좌표입니다. 이 때, tx가 0보다 작거나, ty가 0보다 작거나, tx가 r보다 크거나 같거나, ty가 c보다 크거나 같다면 vaild한 좌표가 아닙니다.

 

 

 인접한 좌표 (tx,ty)가 직사각형 내에 들어오지 않는다면 넷 중 하나의 조건은 무조건 만족할 겁니다. ty>=c이거나, 아니면 ty<0인 경우. 이걸 그림으로 그려보면 아래와 같습니다.

 

 

 tx, ty가 정수라고 한다면, ty<0이거나, ty>c-1, 그러니까 ty>=c인 경우 초록색 부분에 점이 있음을 알 수 있어요. 직사각형 바깥에 있나요? 그런데, 우리는 무슨 경우를 빼버렸나요? tx<0이거나, tx>=r인 경우를 뺀 거 같은데요.

 

 

 초록색 부분이 아니면서 tx<0이거나, tx>r-1인, 그러니까 tx>=r인 영역을 그려보면 위와 같습니다. 보라색으로 색칠한 부분인데요. 이 네 조건중 하나라도 걸리면 직사각형의 외곽에 있음을 알 수 있어요. 그러면 이 때 어떻게 했나요? 루프 안에 있는 문장인 printf 문장을 건너 뛰어버렸습니다.

 

 

 13번째 if문에 걸렸던 조건절을, cond라고 해 봅시다. 그러면 cond가 참인 경우에, tx와 ty를 출력하지 않고 루프의 i++, 그러니까 i = i+1을 하는 부분으로 넘어간다는 것을 알 수 있어요. 초록색 부분을 skip 한 거에요. 그렇지 않다면, 초록색 부분을 skip 하지 않고 수행할 거에요. 즉, continue 문이 나오면, 그 문장이 걸린, 반복문의 끝으로 이동한다고 보셔도 좋을 듯 싶습니다.

 

 물론, 이것을 continue 문을 쓰지 않고도 같은 일을 하게끔 할 수는 있어요.

 

 

 이렇게 if문으로, 직사각형 범위 내에 들어왔다면, 출력하는 식으로 코딩해도 나쁘지는 않아요. 그런데 조건문 깊이가 하나 늘어나 버렸어요. 저는 이런 거 싫어하는데요. 그런 걸 줄이기 위해서 ps에서 continue를 왕왕 쓰곤 합니다.

반응형

댓글을 달아 주세요

  1. 베스트터치

    역시 잘보고갑니다.^^

  2. 익명

    비밀댓글입니다

  3. 한번사는인생.

    저도 잘 보고 갑니다!ㅎㅎ

  4. 우희희

    도움받고가요~