while문에서 continue 사용 시 에러, 문제가 발생하는 경우

728x90

while문에서 continue 사용 시 에러, 문제가 발생하는 경우

 

반복문에서 조건문을 통해 특정 케이스에 대해 continue를 걸게 되면 continue 아래의 코드는 수행되지 않고 다음 케이스로 넘어간다.

 

#include <stdio.h>
int main() {
    int sum = 0;
    for (int i = 1; i <= 100; i++){ // 1에서 100까지 7의 배수를 제외한 수의 합
        if (i % 7 == 0)
            continue;
        sum += i;
    }
    printf("합 : %d", sum);
    return 0;
}

 

7의 배수인 경우에 대해서 continue가 수행되기 때문에 sum += i 코드는 실행되지 않고 i에 대한 증감으로 이어지는 것이다.

 

그런데 가끔 while문과 continue를 같이 쓰는 경우에 원하는 대로 코드가 동작하지 않을 때가 있었다.

 

이유는 보통 두가지 중에 하나였다.

1 : 조건문 코드가 여러줄인데 중괄호를 빼먹었다.

2 : 증감문을 쓰지 않고 continue를 수행해서 무한루프가 걸리게 되었다.

 

#include <stdio.h>
int main(){
    int sum = 0;
    int n = 1;
    while (n<101){
        if (n % 7 == 0){  // n이 7이 되는 순간 무한루프가 걸리게 됨
            continue;
        }
        sum += n;
        n++;
    }
    printf("sum : %d", sum);
    return 0;
}

 

for문으로 작성된 코드를 while문으로 바꾸었을 뿐인데 콘솔창에는 아무 값도 출력되지 않았다.

무슨 거룩한 이유가 있는게 아니라 그냥 n에 대한 증감 없이 continue를 수행했기 때문에 n=7 -> continue -> n=7 -> continue 인 상황이 반복되었기 때문이었다.

for문은 형식상 증감문을 빠뜨릴 일이 잘 없지만 while문은 증감문을 무시하는 경우가 많아 이러한 실수를 많이 하게 된다.

#include <stdio.h>
int main(){
    int sum = 0;
    int n = 1;
    while (n<101){
        if (n % 7 == 0){
            n++;	// continue가 수행되기 전에 n을 증가시킨다.
            continue;
        }
        sum += n;
        n++;
    }
    printf("sum : %d", sum);
    return 0;
}
728x90