반복문 : While문
C언어에서 while문은 주어진 조건이 참(true)인 동안 코드 블록을 반복 실행하는 데 사용된다. while문은 조건이 반복의 시작에 평가되므로, 조건이 처음부터 거짓인 경우 코드 블록은 한 번도 실행되지 않을 수 있다.
⭐ 1. While문의 기본 구조
While문의 기본 구조는 다음과 같다.
while (조건) {
// 조건이 참인 동안 실행할 코드
}
조건: 반복문의 계속 여부를 결정하는 조건이다. 이 조건이 거짓이 되면 반복문이 종료된다.
#include <stdio.h>
int main() {
int i = 0; // 반복문 제어를 위한 변수 초기화
while (i < 5) {
printf("%d\n", i);
i++; // 변수를 증가시켜 eventually 반복문 종료 조건에 도달하게 함
}
return 0;
}
위의 코드는 i가 5보다 작은 동안 i의 값을 출력하고, i를 하나씩 증가시킨다. i가 5에 도달하면 조건이 거짓이 되어 while 반복문이 종료된다.
⭐ 2. Break
break 문은 while 반복문 (또는 다른 반복문) 내부에서 반복을 즉시 종료시키는 데 사용된다. 이는 특정 조건이 충족될 때 반복문을 빠져나오고 싶을 때 유용하게 활용된다. 예를 들어, 사용자로부터 입력을 받아 특정 값이 입력되면 반복을 중단하는 상황에서 break를 사용할 수 있다.
다음은 break 문을 사용하는 간단한 C 코드 예시이다. 이 예제에서는 사용자가 0을 입력할 때까지 숫자를 계속 입력받아 그 합을 출력한다. 사용자가 0을 입력하면, break 문이 실행되어 while 반복문을 즉시 종료한다.
#include <stdio.h>
int main() {
int sum = 0, number;
while (1) { // 무한 루프
printf("숫자를 입력하세요 (종료하려면 0을 입력): ");
scanf("%d", &number);
if (number == 0) {
break; // 사용자가 0을 입력하면 반복문을 빠져나옴
}
sum += number; // 사용자가 0이 아닌 수를 입력하면 sum에 더함
}
printf("입력한 숫자의 합은: %d\n", sum);
return 0;
}
⭐ 3. Continue
continue 문은 C언어에서 반복문 (for, while, do-while) 내에서 현재 반복을 즉시 종료하고, 다음 반복으로 넘어가게 하는 데 사용된다. 이는 특정 조건 하에서 반복문의 나머지 부분을 건너뛰고 싶을 때 유용하다. 반복문의 조건 평가로 직접 이동하여 다음 반복이 시작된다.
다음 예제는 0부터 9까지 숫자 중에서 홀수만 출력하는 간단한 while 반복문을 보여준다. 여기서 continue 문은 짝수일 경우 반복문의 나머지 부분을 실행하지 않고 다음 반복으로 넘어가도록 한다.
#include <stdio.h>
int main() {
int i = 0;
while (i < 10) {
i++; // 먼저 증가시키면 홀수 판별 가능
if (i % 2 == 0) {
continue; // i가 짝수이면 출력을 건너뛰고 다음 반복으로 넘어감
}
printf("%d\n", i); // 홀수인 경우에만 실행됨
}
return 0;
}
⭐ 4. 주의사항
#include <stdio.h>
int main() {
int count = 0;
// 예시 1: 무한 루프 발생
while (count >= 0) { // count가 0보다 크거나 같기 때문에 종료되지 않음
printf("무한 루프 예시: count = %d\n", count);
// count를 업데이트하지 않아서 무한 루프 발생
}
// 예시 2: 조건 업데이트 누락
int limit = 5;
while (limit > 0) {
printf("조건 업데이트 누락 예시: limit = %d\n", limit);
// limit 값을 업데이트하지 않아서 무한 루프에 빠질 수 있음
}
// 예시 3: 복잡한 조건 사용
int x = 10, y = 20;
while ((x > 0 && y > 0) || (x % 2 == 0 && y % 3 != 1) || (x - y != 10)) {
printf("복잡한 조건 예시: x = %d, y = %d\n", x, y);
x--; // x는 감소하지만 조건이 너무 복잡하여 가독성이 떨어짐
}
// 예시 4: break와 continue의 부적절한 사용
int i = 0;
while (i < 10) {
printf("break와 continue 예시: i = %d\n", i);
if (i % 2 == 0) {
continue; // i를 업데이트하기 전에 continue 실행 -> 무한 루프 발생 가능
}
if (i > 5) {
break; // 불필요한 지점에서 break를 사용하여 반복문의 흐름을 혼란스럽게 함
}
i++; // i를 적절히 업데이트하지 않아 반복문이 제대로 동작하지 않음
}
return 0;
}
이 코드의 문제점은 다음과 같다.
- 무한 루프 발생: count를 업데이트하지 않거나 조건이 항상 참이 되어 무한 루프가 발생한다.
- 조건 업데이트 누락: limit 값을 반복문 내부에서 업데이트하지 않아 무한 루프에 빠질 수 있다.
- 복잡한 조건 사용: 조건식이 너무 복잡해서 코드의 흐름이 이해하기 어려워지고, 유지보수성이 떨어진다.
- break와 continue의 부적절한 사용: continue와 break를 잘못 사용하여 변수 업데이트가 누락되거나, 불필요한 지점에서 반복문이 종료될 수 있다.
이와 같은 실수를 피하려면, while문을 사용할 때 조건과 변수 업데이트를 명확하게 작성하는 것이 중요하다.
'C언어 30강' 카테고리의 다른 글
[C/C++ Tip] 24. C언어 파일 입출력 (1) | 2024.11.09 |
---|---|
[C/C++ Tip] 23. 지역 변수, 전역 변수, 정적 변수 (0) | 2024.11.09 |
[C/C++ Tip] 21. C언어 반복문: For문 (0) | 2024.11.09 |
[C/C++ Tip] 20. C언어 조건문 마스터하기 : Switch문 (1) | 2024.11.05 |
[C/C++ Tip] 19. C언어 조건문 마스터하기 : 삼항연산자 (0) | 2024.11.05 |