#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; }
이 코드의 실행 흐름을 보면,
- a에 10을 대입함
- a를 출력함
- 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단을 출력하게 되는 것이죠.