do_while문은 while문과 비슷하나 반복 조건을 루프의 처음이 아니라 루프의 끝에서 검사한다는 것이 다르다.


1
2
3
4
5
6
do
{
    문장1;
    문장2;
    문장3;
while (조건);
cs


do_while 흐름도흐름도

흐름도를 자세히 보면 알겠지만 첫 실행시 루프안의 문장이 무조건 1번은 실행된다. 그다음 조건을 검사하여 참이면 반복, 거짓이면 종료된다.


//do_while 예제 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//사용자가 0을 입력할 때까지 숫자를 더한다.
#include <stdio.h>
 
int main()
 
{
    int number, sum = 0;
    do // 루프 몸체가 무조건 1번 실행된다.
    {
        printf("정수를 입력하시오 : ");
        scanf("%d"&number);
        sum += number;
    } while (number != 0);
 
    printf("숫자들의 합 = %d \n", sum);
    return 0;
}
cs

주의

do_while문에서는 반복 문장이 적어도 한번은 실행된다.

1
2
3
4
5
6
7
int i = 10000;
 
do
{
    printf("i = %d\n", i);
    i++;
while( i < 3 );
cs

위 코드에서는 i값이 10000이라고 해도 무조건 루프가 실행되어 조건이  i < 3  이라할지라고 i = 10000 이 출력된다. 



//do_while 문을 이용한 메뉴 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//do_while문을 이용한 메뉴
#include <stdio.h>
 
int main()
{
    int i = 0;
    do
    {
        printf("1---새로 만들기\n");
        printf("2---파일 열기\n");
        printf("3---파일 닫기\n");
        printf("하나를 선택하시오\n");
        scanf("%d"&i);
    } while (i < 1 || i > 3);
 
    printf("선택된 메뉴 = %d", i);
    return 0;
}
cs

사용자가 적절한 선택을 할 때 까지 메뉴를 화면에 출력하는 것을 반복한다. 사용자로부터 유효한 입력을 받기 전에 적어도한번은 메뉴를 나타내야 하기 떄문에 do_while문이 사용되었다. 입력된 값이 1보다 작거나 3보다 크면 메뉴를 다시 표시하여 사용자가 적합한 메뉴값을 선택하도록 반복한다.










//랜덤 숫자 게임

do_while문을 이용하여 컴퓨터가 랜덤으로 생성한 숫자를 사용자가 맞추는 게임이다. 여기서는 아직 배우지 않은 난수 생성문이 들어가있다 일단은 참고만 하자. 주석으로 간단하게 설명을 해주겠다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 알고리즘
do
{
    사용자로부터 숫자를 guess로 입력받는다.
    시도횟수를 증가한다.
    if (guess < answer)
    {
        숫자가 낮다고 출력한다.
    }
    if (guess > answer)
    {
        숫자가 높다고 출력한다.
    }
while (guess != answer);
"축하합니다"와 시도횟수를 출력한다.
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <stdlib.h> // 난수 생성에 필요한 헤더파일.(rand)
#include <time.h>   // 난수 생성에 필요한 헤더파일.(time)
 
int main()
 
{
    int answer = 0;
    srand(time(NULL)); // 현재 시간을 난수 참조값으로 설정
    int guess;
    int tries = 0;
 
    answer = rand() % 100// 난수 생성
 
    do
    {
        printf("guess answer number : "); 
        scanf("%d"&guess);               //입력
        tries++;                           //시도 횟수를 1씩 증가시킨다.
 
        if (guess > answer)
            printf("\n입력된 값이 정답보다 큽니다. = %d\n", tries);
        if (guess < answer)
            printf("\n입력된 값이 정답보다 작습니다. = %d\n", tries);
    } while (guess != answer);             //생성된 난수와 입력값이 같으면 반복을 종료한다.
 
    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n정답입니다. = %d\n", tries); //정답입니다와 시도 횟수를 증가시킨다.
    return 0;
}
 
cs

if문을 사용하여 guess가 andwer보다 작은지 큰지를 검사하고 적당한 메시지를 출력한다. guess가 answer와 같으면 반복을 종료한다.


'C 프로그래밍 > 5. 반복문' 카테고리의 다른 글

5-5-2 for 문 2  (0) 2019.05.21
5-5-1 for 문 1  (0) 2019.05.21
5-3 반복 루프에서 보초값 사용하기  (0) 2019.05.21
5-2 while문  (0) 2019.05.19
5-1 반복의 개념  (0) 2019.05.18