#17 반복문(2)

반복을 중지하거나 건너뛰는 방법을 알아봅시

Table Of Contents

break

for (int a = 10;;a++) { printf("%d\\n", a); }

이전 글에서 이런 코드가 문법적으로 틀리지 않다고 했습니다. 하지만 이 코드를 실행시키면 무한히 a를 출력하게 됩니다. for문 안에 조건식을 사용하지 않고도 반복문을 종료시킬 수 있을까요?

break는 반복문을 종료시켜주는 역할을 합니다.

break문은 이렇게 사용할 수 있습니다.

for (int a = 10;;a++) { printf("%d\\n", a); break; }

이 코드의 실행 흐름을 보면,

  1. a에 10을 대입함
  2. a를 출력함
  3. break해서 반복문을 빠져나옴

입니다.

만약 10, 11, 12까지 출력하고 반복문을 빠져나오고 싶다면,

for (int a = 10;;a++) { printf("%d\\n", a); if (a == 12) break; }

처럼 작성할 수 있습니다.

while문 안에서도 같습니다.

int a = 10; while (1) { printf("%d\\n", a); if (a == 12) break; a++; }

처럼 쓰면 됩니다.

while (1)

while문의 조건식 자리에 1이라는 정수형 데이터가 들어가 있습니다.

조건식에 정수형이 들어갈 때는 0은 거짓, 0 이외의 숫자들은 참인 것으로 판단됩니다.

예를 들어서

if (0) { printf(”출력되지 않아요"); }

이런 코드에서 위 문자열은 출력되지 않습니다. 조건문 안에 거짓이 들어가 있기 때문입니다.

반대로, 이런 코드에서는 문자열이 출력됩니다.

if (1) { printf(”출력돼요!"); }

그렇다면 while(1)은 어떻게 작동할까요? 1은 참으로 평가되므로 break문을 써서 반복문을 빠져나오지 않는 한, 무한히 while문이 작동하게 됩니다.

continue

이런 경우를 생각해볼까요?

“2단~9단을 출력하되, 7단은 출력하지 말 것”

이전 글에서 배운 대로라면 구구단은 출력할 수 있습니다. 하지만 7단만 출력하지 않으려면 어떻게 해야 할까요?

이전에 배운 if문을 이용해서 코딩해 볼 수 있겠네요.

for (int i = 2; i <= 9; i++) { if (i != 7) { for (int j = 1; j <= 9; j++) { printf("%d * %d = %d\\n", i, j, i * j); } } }

또한, continue를 사용해서도 코딩할 수 있습니다.

continue는 continue 뒤에 있는 코드들을 건너뛰게 해 줍니다.

for (int i = 2; i <= 9; i++) { if (i == 7) continue; for (int j = 1; j <= 9; j++) { printf("%d * %d = %d\\n", i, j, i * j); } }

이렇게 작성한다면, i가 7일 때는 continue문이 동작해서 아래 for문을 건너뛰게 됩니다. continue문을 통해서 아래 코드를 건너뛰었다면, 바로 변화식 안의 코드를 실행하게 됩니다.

i == 7인 경우, 7단을 출력하지 않고 바로 i++로 넘어가 i=8이 되고, i != 8이므로 8단을 출력하게 되는 것이죠.