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
'C언어' 카테고리의 다른 글
C언어 정리1 (0) | 2022.05.09 |
---|---|
[C언어] 문자열 복사 strcpy 함수 (0) | 2022.02.25 |
[C언어] 백준 2798 : 블랙잭 (0) | 2022.01.26 |
[C언어] char 배열 선언시 주의사항 (0) | 2022.01.24 |
[C언어] 문자 입출력 함수 getchar(), putchar() (0) | 2022.01.24 |