프로그램에서는 반복되는 일이 많다. 로그인할 때 아이디와 비밀번호가 일치할 때까지 입력받는 일도, 같은 화면을 여러번 띄우는 일도, 같은 연산을 거듭해야 하는 일도 모두 반복이 필요하다. 반복하려면 같은 코드를 계속 작성해야 할까? 그렇지 않다. 반복문을 활용하면 얼마나 긴 코드를 몇 번이나 반복하더라도 훨씬 쉬운 일이 된다.
세 가지 형식의 반복문에 대해 알아보겠다.
우선 예시를 보자.
#include <stdio.h>
int main(void) {
int i = 0;
while (i < 5) {
printf("%d번째 반복입니다.\n", i + 1);
i++;
}
return 0;
}
1번째 반복입니다.
2번째 반복입니다.
3번째 반복입니다.
4번째 반복입니다.
5번째 반복입니다.
while문은 특정 조건을 만족할 때, 해당 코드를 실행하는 반복문이다. i가 5보다 작은 이상 중괄호 안의 코드는 계속하여 실행된다. i가 1씩 증가했기 때문에, i가 0, 1, 2, 3, 4일 때 실행되어 결과적으로 5번 반복된다. 만약 매 반복마다 i의 증가가 이루어지지 않는다면 이 조건은 계속하여 만족되고, 반복문은 계속하여 실행되어 프로그램은 종료되지 않는다. 이를 infinite loop(무한루프)라 한다.
👉🏻while문에서 조건을 항상 참으로 만들어주면 무한루프를 생성할 수 있다. 실제로 코드를 짜다 보면 이러한 방식이 필요할 때가 생긴다.
while(1){
//반복할 코드
}
while 안에는 0이 아닌 값이 들어오면 되지만, 보통 1로 쓴다.
프로그램을 짤 때 반복문을 사용하다 보면, 처음 한 번은 무조건 실행해야하는 경우가 많다. 예를 들어 입력을 받을 때, 조건에 맞지 않으면 계속 반복하여 묻는 경우 처음 한번은 조건과 상관 없이 실행되어야 한다.
do while이 필요할 때 while문으로 작성한다면 문제는 없지만 같은 코드를 두 번 작성해야 하는 불편함이 있으므로 잘 활용하는 것이 좋다.
구문은 다음과 같이 작성한다.
do{
//반복 내용
}while(조건);
앞으로 굉장히 많이 사용하게 될 for문에 대해 알아보겠다. for문은 while문에서 while문 내에 작성했던 i++,i--와 같은 증감식, 내부 혹은 바깥에 작성했던 초기화식을 한줄로 묶은 구문이라고 생각할 수 있다. 구조는 다음과 같다.
for(초기화식; 조건식; 증감식){
//반복 내용
}
초기화식은 처음 한 번만 실행되며, 조건식과 증감식은 매 반복마다 실행되는데, 조건식은 반복 전에, 증감식은 반복 후에 실행된다. 조건식을 만족하지 못한다면 더이상 반복은 이루어지지 않고 for문을 빠져나온다.
초기화식, 조건식, 증감식은 비워둘 수 있으며 조건식이 비워져있는 경우 해당 조건은 무조건 참인것으로 취급한다.
❗반복문에서 반복의 대상이 문장 하나인 경우, 중괄호는 생략가능하다.
❗반복문은 중첩하여 사용할 수 있다.
특정 조건이 주어진 경우 while문, 무조건 한 번은 실행되어야하는 경우 do~while문, 반복 횟수가 정해진 경우 for문을 사용하는 것이 대체로 좋으며, 필요에 따라 어떠한 반복문을 사용할 것인지 결정해야 한다.