그다음 조건식을 판별하여 참이면 코드를 계속 반복하고 거짓이면 반복문을 끝낸 뒤 다음 코드를 실행한다.
여기서는 루프 본체 및 변화식 → 조건식으로 순환하는 부분이 루프이다.
3. do while 반복문 사용하기
먼저 do while을 사용하여 "Hello, world!"를 100번 출력해 보자.
#include<stdio.h>intmain(){inti=0;do// 처음 한 번은 아래 코드가 실행됨{printf("Hello, world! %d\n",i);// "Hello, world!"와 i의 값을 함께 출력i++;// i를 1씩 증가시킴}while(i<100);// i가 100보다 작을 때 반복. 0부터 99까지 증가하면서 100번 반복return0;}// Hello, world! 0// Hello, world! 1// ... (생략)// Hello, world! 97// Hello, world! 98// Hello, world! 99
먼저 반복문에 사용할 변수를 선언한 뒤 0으로 초기화한다.
그리고 do 아래에 {}를 열고 반복할 코드와 변화식을 넣는다.
마지막으로 {}를 닫은 뒤 while에 조건식을 지정하고 ;(세미콜론)을 붙여주면 된다.
do 다음에 오는 코드는 조건식과 상관없이 무조건 한 번은 실행된다.
따라서 printf가 한 번 실행되고, i++도 실행되어 i가 1 증가한다.
이 상태로 조건식에서 i가 100보다 작은지 검사하게 된다.
아직은 i가 100보다 작으므로 계속 반복하다가 i가 100이 되면 i < 100은 거짓이 되므로 반복을 끝낸다.
do while 반복문도 반드시 {} 안에 변화식을 지정해야 한다.
만약 조건식만 지정하고 {} 안에서 변화식을 생략하면 반복이 끝나지 않고 계속 실행되므로 주의해야 한다.
do while을 while로만 표현하면 다음과 같다.
#include<stdio.h>intmain(){inti=0;// do에 해당하는 부분printf("Hello, world! %d\n",i);// 처음 한 번은 실행i++;// 처음 한 번은 실행while(i<100)// i가 100보다 작을 때 반복. 0부터 99까지 증가하면서 100번 반복{printf("Hello, world! %d\n",i);// "Hello, world!"와 i의 값을 함께 출력i++;// i를 1씩 증가시킴}return0;}// Hello, world! 0// Hello, world! 1// ... (생략)// Hello, world! 97// Hello, world! 98// Hello, world! 99
while 반복문을 실행하기 전에 printf로 문자열을 출력하고 i++로 i를 1 증가시켰다.
이 부분은 do while에서 처음 한 번은 조건문과 상관없이 실행되는 점과 같다.
이처럼 do while은 처음 한 번은 실행해야 하며 그 이후에는 조건에 따라 반복해야 하는 코드를 간단하게 표현할 수 있다.
4. 초깃값을 1부터 시작하기
이번에는 i를 0이 아닌 1로 초기화하여 "Hello, world!"를 100번 출력해 보자.
#include<stdio.h>intmain(){inti=1;do// 처음 한 번은 아래 코드가 실행됨{printf("Hello, world! %d\n",i);// "Hello, world!"와 i의 값을 함께 출력i++;// i를 1씩 증가시킴}while(i<=100);// i가 100보다 작거나 같을 때 반복. 1부터 100까지 증가하면서 100번 반복return0;}// Hello, world! 1// Hello, world! 2// ... (생략)// Hello, world! 98// Hello, world! 99// Hello, world! 100
i를 1로 초기화했기 때문에 while의 조건식은 i <= 100과 같이 지정한다.
따라서 i가 1부터 100까지 증가하므로 100번만 반복하게 된다.
만약 101이 되면 i <= 100은 거짓이므로 반복문을 종료한다.
5. 초깃값을 감소시키기
반대로 초깃값을 크게 주고, 변수를 감소시키면서 반복할 수도 있다.
#include<stdio.h>intmain(){inti=100;do// 처음 한 번은 아래 코드가 실행됨{printf("Hello, world! %d\n",i);// "Hello, world!"와 i의 값을 함께 출력i--;// i를 1씩 감소시킴}while(i>0);// i가 0보다 클 때 반복. 100부터 1까지 감소하면서 100번 반복return0;}// Hello, world! 100// Hello, world! 99// ... (생략)// Hello, world! 3// Hello, world! 2// Hello, world! 1
i가 100이고, 변화식에서 i--로 지정하여 반복을 할 때마다 변수를 1씩 감소시켰다.
그리고 조건식이 i > 0이므로 100에서 1까지 감소시켜서 100번이 된다.
즉, i가 0이 되면 반복문을 끝낸다.
6. 입력한 횟수대로 반복하기
이번에는 입력한 횟수대로 반복을 해보자.
#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지#include<stdio.h>intmain(){intcount;scanf("%d",&count);// 값을 입력받음inti=0;do// 처음 한 번은 아래 코드가 실행됨{printf("Hello, world! %d\n",i);// "Hello, world!"와 i의 값을 함께 출력i++;// i를 1씩 증가시킴}while(i<count);// i가 count보다 작을 때 반복return0;}// 5 (입력)// Hello, world! 0// Hello, world! 1// Hello, world! 2// Hello, world! 3// Hello, world! 4
scanf 함수로 입력 값을 받아서 count 변수에 저장했다.
그리고 do 다음에 반복할 코드와 변화식을 넣는다.
마지막으로 while에서 조건식을 i < count와 같이 지정하여 count에 들어있는 값만큼 반복하도록 했다.
이번에는 초깃값을 받은 뒤 초깃값만큼 출력해 보자.
#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지#include<stdio.h>intmain(){intcount;scanf("%d",&count);// 값을 입력받음do// 처음 한 번은 아래 코드가 실행됨{printf("Hello, world! %d\n",count);// "Hello, world!"와 i의 값을 함께 출력count--;// count를 1씩 감소시킴}while(count>0);// count가 0보다 클 때 반복return0;}// 5 (입력)// Hello, world! 5// Hello, world! 4// Hello, world! 3// Hello, world! 2/Hello,world!1
scanf 함수로 입력 값을 받아서 count 변수에 저장했다.
그리고 do 다음에 반복할 코드와 변화식을 넣는다.
여기서는 i를 선언하지 않고 count를 바로 사용하므로 변화식은 count--로 지정하여 반복문이 실행될 때마다 count를 감소시킨다.
마지막으로 while에서 조건식을 count > 0과 같이 지정하여 count에 들어있는 값만큼 반복하도록 했다.
7. 반복 횟수가 정해지지 않은 경우
while 반복문과 마찬가지로 do while 반복문도 반복 횟수가 정해지지 않았을 때 주로 사용한다.
단, while 반복문과는 달리 최소 한 번은 실행된다는 점이 차이가 있다.
다음은 do while 반복문 안에서 무작위로 정수를 생성한 뒤 3이 나오면 반복을 끝낸다.
#include<stdio.h>#include<stdlib.h> // srand, rand 함수가 선언된 헤더 파일#include<time.h> // time 함수가 선언된 헤더 파일intmain(){srand(time(NULL));// 현재 시간값으로 시드 설정inti=0;do{i=rand()%10;// rand 함수를 사용하여 무작위로 정수를 생성한 뒤 10 미만의 숫자로 만듦printf("%d\n",i);}while(i!=3);// 3이 아닐 때 계속 반복return0;}// 1// 5// 6// 3// ↑ 무작위 생성이므로 실행할 때마다 달라짐