1. while, do while
- 어떤 조건이 true 라면 계속해서 반복하는 반복문이다.
- while과 do while의 차이점으로는 최소한 한번 실행하고 조건을 확인하느냐 혹은 조건부터 확인하고 실행하냐에 있다
1-1. while
- while 문 부터 본다면 a 가 10 미만이라면 계속해서 2를 곱한 값을 할당한다.
- a가 8 * 2 로 16이 되는 순간 조건문을 나온다.
#include <stdio.h>
int main(void)
{
int a = 1;
while (a < 10)
{
a = a * 2;
}
printf("a : %d\n", a); // 16이 출력된다.
return 0;
}
1-2. do while
- 최소한 한번을 실행하고 조건을 검사한다.
- 주로 입력을 한번은 받아야 한다던가 등에서 쓰일 수 있다.
- 상황에 맞게 쓰면 좋은 경우가 있지만 주로 while을 더 많이 사용하긴 한다. (순수 필자 개인 의견입니다.)
#include <stdio.h>
int main(void)
{
int a = 1;
do
{
a = a * 2;
} while (a < 10);
printf("a : %d\n", a); // 16이 출력된다.
return (0);
}
- 입력을 받아야 하는 예시 코드는 아래와 같다
- a를 선언만 한 상태에는 쓰레기 값이 들어있기 때문에 조건을 검사하기 전에 a에 값을 넣어줘야 한다.
- 이런 식으로 최소한 한번의 행동을 먼저 해야할 때 do while을 유용하게 사용할 수 있다.
#include <stdio.h>
int main(void)
{
int a;
do
scanf("%d", &a);
while (a < 0);
return (0);
}
2. for
- 초기화, 조건, 반복 종료 후 행동으로 총 3가지 행동을 반복할 수 있는 강력한 반복문이다.
2-1. for 문 생김새
- 예시 코드는 아래와 같다
- for(초기식; 조건문; 코드 실행 후 할 행동[주로 증감식]) 으로 구성되어 있다.
- 아래 코드의 경우에 i가 0~2까지 총 3번 반복한다.
- 각 섹션 구분은 ;(세미콜론)으로 하며 각 섹션이 존재하지 않아도 된다. (다만 이 경우 무한 루프 주의)
- 또한 코드 실행 후 행동으로 다른 변수의 값을 변경하거나 다른 행동을 할 수도 있으며
- for (int i = 0; 조건식; 코드 실행 후 행동) 처럼 변수를 외부에 초기화하지 않고 내부에서 초기화 할 수도 있다.
- 단 위와 같은 경우는 for 문이 끝나면 변수 i는 소멸한다.
#include <stdio.h>
int main(void)
{
int a = 1;
int i;
for (i = 0; i < 3; i++) // i를 0으로 초기화 한다.
{ // 만약 i가 3미만이라면 {}에 포함된 코드를 실행한다.
a = a * 2;
} // 코드 실행이 끝나면 i++에 해당하는 식을 실행한다
printf("a : %d\n", a);
return (0);
}
3. break, continue
- 좀 더 반복문을 상황에 맞게 사용하도록 도와주는 두개의 예약어가 있다.
- 반복문을 강제로 종료하는 break와
- 해당 반복을 그냥 넘기는 continue가 있다.
3-1. break
- 이 구문을 만나면 이 구문을 포함하고 있는 반복문을 하나 나온다.
#include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for (i = 1; i <= 10; i++)
{
sum += i;
if (sum > 30) break; // sum이 30을 넘는 순간 반복이 종료된다.
}
printf("prefix_sum : %d\n", sum);
printf("last added : %d\n", i); //i는 8로 9번째와 10번째 반복이 시행되지 않음을 알 수 있다.
return (0);
}
- 위에서 강조했지만 break는 모든 반복문을 나오지 않고 이 break를 감싸고 있는 가장 바깥의 반복문 하나만 나온다.
- 아래 함수의 동작을 보면 j가 1일 때 해당 break를 감싸는 안쪽 for문만 빠져나온다
- 또 if문 안에 break가 있는 걸 확인할 수 있는데, if문 안에서 break를 사용해도 if 문을 감싸는 반복문을 빠져나온다.
- 다만 switch ~ case문에서는 switch ~ case문을 빠져나온다.
#include <stdio.h>
int main(void)
{
int i;
for (i = 0; i < 3; i++)
{
for (int j = 0; i < 3; j++)
{
printf("i is : %d, j is : %d\n", i , j);
if (j == 1)
break;
}
}
return (0);
}
더보기
//출력 결과
i is : 0, j is : 0
i is : 0, j is : 1
i is : 1, j is : 0
i is : 1, j is : 1
i is : 2, j is : 0
i is : 2, j is : 1
3-2. continue
- continue는 반복문을 건너뛰는 역할을 한다.
- for문의 경우 반복문을 마치고 코드 실행 후 할 행동[주로 증감식]으로 이동하고 while문은 조건을 검사하는 곳으로 이동한다.
#include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for (i = 1; i <= 100; i++)
{
if (i % 3 == 0) // 만약 i가 3의 배수라면 continue를 만나게되고
continue; // 이 코드를 만나면 sum += i는 무시되고 바로 i++로 이동한다
sum += i;
}
printf("%d\n", sum); // 이런식으로 3의 배수가 아닌 수들의 합을 구하는 코드를 만들 수 있다.
return (0);
}
'Language > C' 카테고리의 다른 글
혼공C (8장) - C 배열, VLA, 문자열 혼공C 8장 실전예제 (1) | 2024.03.24 |
---|---|
혼공C (7장) - C 함수 기초, 혼공C 7장 실전예제 (0) | 2024.03.22 |
혼공C (5장) - 선택문, 조건문 (if, else if, else, switch, case) (0) | 2024.03.20 |
혼공C (4장) - 연산자 (형변환, sizeof, 복합대입, 비트연산) (0) | 2024.03.08 |
혼공C (3장) - 변수와 scanf를 사용한 데이터 입력 (1) | 2023.11.28 |