안녕하세요.
이번에는 루프 제어문에 대한 정리를 하겠습니다.
1. 루프 제어문(루프문)
1) 의미
- 루프 제어문(루프문)이란 일정한 조건에 맞춰 내용을 반복하는 제어문입니다.
2) 종류
- 진입 조건 루프문 : while 문, for 문
- 탈출 조건 루프문 : do while 문
- 중첩 루프문
3) 종료 : 조건 종료
- 루프에 관련된 조건이 false 가 되었을 때 루프를 종료하는 경우를 말합니다.
4) 점프 : break
- break 이라는 키워드를 만나 루프를 종료하는 경우를 말합니다.
4.1) 점프 : continue
- continue 라는 키워드를 만나 루프를 재반복하는 경우를 말합니다.
2. 진입 조건 루프문
- 진입 조건 루프란 조건이 진입에 관련되어 시작하는 루프문을 말합니다.
1. while 문
1) 의미
- while 문이란 조건이 참인 경우에 내용을 반복하는 루프 제어문입니다.
- 따라서 while 문을 종료시키기 위해서는 조건을 거짓으로 만들거나, break 문을 사용해야 합니다.
2) 사용 구조
while(조건)
{
}
> 조건이 참(true, 0이 아닌 경우)이라면 블록({~})을 반복합니다.
3) 확정 루프(test4.c)
- 확정루프란 조건의 종료가 명확히 밝혀진 경우를 말합니다.
#include <stdio.h>
int main(void)
{
int i = 1;
// step1 : while
while(i <= 5)
{
printf("%d\n", i);
// step 2 : 조건 -> false
// i = 6;
// step 3 : break
// break;
// step 4 : continue
/* if(i == 1)
{
i = 5;
continue;
}*/
i++;
}
return 0;
}

> step 1 : while 문은 확정된 조건의 범위인 i = 1 인 경우부터 i = 5 일 때까지 총 5번 반복하여 i의 값을 출력합니다.
3.1) 조건 종료(test4.c)
#include <stdio.h>
int main(void)
{
int i = 1;
// step1 : while
while(i <= 5)
{
printf("%d\n", i);
// step 2 : 조건 -> false
i = 6;
// step 3 : break
// break;
// step 4 : continue
/* if(i == 1)
{
i = 5;
continue;
}*/
i++;
}
return 0;
}

> step 2 : while 문은 처음 i = 1 인 상태에서 조건에 맞게 블록을 실행하지만, i = 6 이라는 대입문을 만나 값이 변경되고 while의 조건인 i <= 5 라는 관계 연산에서 6 <= 5 가 되어 false 를 반환받아 종료하게 됩니다.
4) 점프 : break(test4.c)
#include <stdio.h>
int main(void)
{
int i = 1;
// step1 : while
while(i <= 5)
{
printf("%d\n", i);
// step 2 : 조건 -> false
// i = 6;
// step 3 : break
break;
// step 4 : continue
/* if(i == 1)
{
i = 5;
continue;
}*/
i++;
}
return 0;
}

> step 3 : while 문은 처음 i = 1 인 상태에서 조건에 맞게 블록을 실행하지만, break 이라는 키워드를 만나 종료하게 됩니다.
4.1) 점프 : continue(test4.c)
#include <stdio.h>
int main(void)
{
int i = 1;
// step1 : while
while(i <= 5)
{
printf("%d\n", i);
// step 2 : 조건 -> false
// i = 6;
// step 3 : break
// break;
// step 4 : continue
if(i == 1)
{
i = 5;
continue;
}
i++;
}
return 0;
}

> step 4 : i 가 1 인 경우에는 i = 5 를 대입한 후 다시 한번 반복합니다.
이후 증가 연산자로 증가된 i 가 관계연산에서 false 를 반환하고, 루프가 종료됩니다.
5) 미확정 루프(test5.c)
- 미확정 루프란 조건의 종료가 명확하지 않는 경우를 말합니다.
- 보통 while True + 종료 조건 구조로 작성합니다.
#include <stdio.h>
int main(void)
{
int num;
// while True
while (1)
{
printf("숫자 입력 (0 입력 시 종료) : ");
scanf("%d", &num);
// 종료 조건
if (num == 0)
{
printf("프로그램 종료\n");
break;
}
printf("입력값 : %d\n\n", num);
}
return 0;
}

> 종료 조건인 0 입력 전까지 계속 반복됩니다.
2. for 문
1) 의미
- for 문이란 초기화, 조건, 갱신을 한번에 처리하는 루프문을 말합니다.
2) 사용 구조
for(초기화; 조건; 갱신)
{
}
for(int i = 0; i < 10; i++)
{
}
> 첫번째 표현으로 정수형 변수 i 를 선언하고, 0 을 대입하여 초기화를 진행합니다.
> 두번째 표현으로 루프의 조건을 선언하여, i 가 10 이 되는 경우 루프를 종료합니다.
> 세번째 표현으로 루프의 갱신을 선언하여, 블록이 한번 진행된 후 i 를 1 증가시킵니다.
3) 확정 루프(test6.c)
- 확정 루프란 조건의 종료가 명확히 밝혀진 경우를 말합니다.
#include <stdio.h>
int main(void)
{
int i;
for(i = 1; i <= 10; i++)
{
printf("%d ", i);
// step 1 : 조건 -> false
// i = 11;
// step 2 : break
// break;
// step 3 : continue
/* if(i == 1)
{
i = 9;
continue;
} */
}
return 0;
}

> for 문의 갱신은 블록이 끝난 후 독립적으로 실행되므로 후위증가, 전위증가는 실질적으로 효과 차이가 미미합니다.
다만 전위증가의 경우에 더 빠르거나 안전한 경우가 있기 때문에 전위증가를 사용하는 습관을 가지는 것이 좋습니다.
3.1) 조건 종료(test7.c)
#include <stdio.h>
int main(void)
{
int i;
for(i = 1; i <= 10; i++)
{
printf("%d ", i);
// step 1 : 조건 -> false
i = 11;
// step 2 : break
// break;
// step 3 : continue
/* if(i == 1)
{
i = 9;
continue;
} */
}
return 0;
}

> step 1 : for 문은 처음 i = 1 인 상태에서 조건에 맞게 블록을 실행하지만, i = 11 이라는 대입문을 만나 값이 변경되고 for 문의 조건인 i <= 10 라는 관계 연산에서 11 <= 10 이 되어 false 를 반환받아 종료하게 됩니다.
4) 점프 : break(test7.c)
#include <stdio.h>
int main(void)
{
int i;
for(i = 1; i <= 10; i++)
{
printf("%d ", i);
// step 1 : 조건 -> false
// i = 11;
// step 2 : break
break;
// step 3 : continue
/* if(i == 1)
{
i = 9;
continue;
} */
}
return 0;
}
> step 2 : for 문은 처음 i = 1 인 상태에서 조건에 맞게 블록을 실행하지만, break 이라는 키워드를 만나 종료하게 됩니다.
4.1) 점프 : continue(test7.c)
#include <stdio.h>
int main(void)
{
int i;
for(i = 1; i <= 10; i++)
{
printf("%d ", i);
// step 1 : 조건 -> false
// i = 11;
// step 2 : break
// break;
// step 3 : continue
if(i == 1)
{
i = 9;
continue;
}
}
return 0;
}
> step 3 : i 가 1인 경우 i = 9 를 대입하고, contiunue 키워드를 만나 for 문을 다시 반복하게 됩니다.
for문을 다시 반복하며 증가 연산자를 통해 i 는 10 이 되어 마지막 반복이 실행되고, 이후 종료되게 됩니다.
5) 미확정 루프(test8.c)
- 미확정 루프란 조건의 종료가 명확하지 않는 경우를 말합니다.
- 보통 for(;;) + 종료 조건 구조로 작성합니다.
- for(;;) 는 while True 와 같은 역할을 합니다.
#include <stdio.h>
int main(void)
{
int num;
for(;;)
{
printf("0 입력 시 종료 : ");
scanf("%d", &num);
if(num == 0)
{
break;
}
printf("입력값 : %d\n", num);
}
printf("프로그램 종료");
return 0;
}

> 종료 조건인 0 입력 전까지 계속 반복됩니다.
2. 탈출 조건 루프문
- 탈출 조건 루프란 조건이 탈출에 관련되어 있는 루프문을 말합니다.
1. do while 문
1) 의미
- do while 문은 while, for 문과 같은 진입 조건 루프문과 다르게 루프의 문장을 적어도 한 번은 실행하도록 보장하는 루프 제어문입니다.
잘 사용하지 않습니다
2) 사용구조
do
{
} while(조건);
> do 를 통해 블록의 내용이 먼저 실행된 후 while 조건이 참이면 반복, 거짓이면 종료됩니다.
3) 조건 true(test9.c)
#include <stdio.h>
int main(void)
{
// step 1 : true
int i = 1;
// step 2 : false
// int i = 6;
do
{
printf("%d\n", i);
i++;
}
while(i <= 5);
return 0;
}

> step 1 : do 를 만나 i = 1 일 때의 블록을 실행하고, while 의 조건에 맞춰 i = 5 까지 반복하게 됩니다.
3.1) 조건 false(test9.c)
#include <stdio.h>
int main(void)
{
// step 1 : true
// int i = 1;
// step 2 : false
int i = 6;
do
{
printf("%d\n", i);
i++;
}
while(i <= 5);
return 0;
}

> step 2 : do 를 만나 i = 6 일 때의 블록을 실행하지만, while 의 조건의 관계 연산(6 <= 5)이 false 를 반환하며 반복이 종료되게 됩니다.
3. 중첩 루프문
1) 의미
- 중첩 루프문이란 내부에 다른 루프문이 들어있는 루프문을 말합니다.
- 보통 행과 열을 표현하기 위한 용도로 사용합니다.
2) 중첩 루프(test10.c)
#include <stdio.h>
int main(void)
{
int row = 3;
int col = 5;
// step1 : 중첩 루프
for(int i = 1; i <= row; i++)
{
for(int j = 1; j <= col; j++)
{
// step2 : break
// break;
printf("%d", j);
// step3 : continue
/* if(j == 1)
{
j = 2;
continue;
} */
}
printf("\n");
}
return 0;
}

> step 1 : 바깥 루프가 행이되고, 내부 루프가 열이되어 표현할 수 있습니다.
3) 점프의 범위
- 점프 키워드(break, continue)는 해당 블록에서 가장 가까운 루프 제어문을 기준으로 합니다.
- 예를 들어 내부의 break 키워드가 있다면 내부 루프문만 종료하게 됩니다.
- 예를 들어 내부의 continue 키워드가 있다면 내부 루프문을 다시 반복하게 됩니다.
3.1) 점프 : break
- break 키워드는 가장 가까운 루프문을 탈출합니다.
#include <stdio.h>
int main(void)
{
int row = 3;
int col = 5;
// step1 : 중첩 루프
for(int i = 1; i <= row; i++)
{
for(int j = 1; j <= col; j++)
{
// step2 : break
break;
printf("%d", j);
// step3 : continue
/* if(j == 1)
{
j = 2;
continue;
} */
}
printf("\n");
}
return 0;
}

> step 2 : 중첩루프 중 내부 루프문에서 break 키워드를 만나 종료하게 되어 어떤 것도 출력할 수 없습니다.
3.2) 점프 : continue
- continue 키워드는 가장 가까운 루프문을 다시 반복합니다.
#include <stdio.h>
int main(void)
{
int row = 3;
int col = 5;
// step1 : 중첩 루프
for(int i = 1; i <= row; i++)
{
for(int j = 1; j <= col; j++)
{
// step2 : break
// break;
printf("%d", j);
// step3 : continue
if(j == 1)
{
j = 2;
continue;
}
}
printf("\n");
}
return 0;
}

> step 3 : j 가 1인 경우 j = 2 를 대입하고, contiunue 키워드를 만나 내부 for 문을 다시 반복하게 됩니다.
for문을 다시 반복하며 증가 연산자를 통해 i 는 2 가 되어 반복이 진행되게 됩니다.
'C > Study' 카테고리의 다른 글
| C언어 : 8. 함수 (0) | 2026.05.25 |
|---|---|
| C언어 : 7. 분기 제어문 (0) | 2026.05.19 |
| C언어 : 5. 연산자 (0) | 2026.05.19 |
| C언어 : 4. 문자열과 입출력 (0) | 2026.05.18 |
| C언어 : 3. 데이터형 (0) | 2026.05.18 |
