do_while문은 while문과 비슷하나 반복 조건을 루프의 처음이 아니라 루프의 끝에서 검사한다는 것이 다르다.
1 2 3 4 5 6 | do { 문장1; 문장2; 문장3; } while (조건); | cs |
흐름도
흐름도를 자세히 보면 알겠지만 첫 실행시 루프안의 문장이 무조건 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 |