icon안동민 개발노트

while과 do-while 반복문


while 반복문 개요

 while 반복문은 조건이 참인 동안 코드 블록을 반복적으로 실행하는 제어 구조입니다.

 반복 횟수가 명확하지 않을 때 주로 사용되며, 조건을 먼저 검사한 후 코드 블록을 실행합니다.

while 반복문의 기본 구조

while (조건) {
    // 반복 실행될 코드
}

 조건이 참인 동안 코드 블록이 계속해서 실행됩니다.

while 반복문 예제

 기본 예제 : 1부터 5까지 출력

#include <iostream>
 
int main() {
    int i = 1;
    while (i <= 5) {
        std::cout << i << " ";
        i++;
    }
    std::cout << std::endl;
    return 0;
}
출력
1 2 3 4 5

 사용자 입력 처리

#include <iostream>
 
int main() {
    int sum = 0;
    int num;
 
    std::cout << "숫자를 입력하세요 (0을 입력하면 종료): ";
    std::cin >> num;
 
    while (num != 0) {
        sum += num;
        std::cout << "현재 합: " << sum << std::endl;
        std::cout << "다음 숫자를 입력하세요 (0을 입력하면 종료): ";
        std::cin >> num;
    }
 
    std::cout << "최종 합: " << sum << std::endl;
    return 0;
}

 이 예제는 사용자가 0을 입력할 때까지 입력받은 숫자들의 합을 계산합니다.

do-while 반복문 개요

 do-while 반복문은 코드 블록을 최소한 한 번 실행한 후 조건을 검사하는 반복문입니다. 조건 검사 전에 코드 블록이 반드시 한 번은 실행되어야 할 때 사용합니다.

do-while 반복문의 기본 구조

do {
    // 반복 실행될 코드
} while (조건);

 코드 블록이 먼저 실행된 후 조건이 검사됩니다.

do-while 반복문 예제

 기본 예제 : 1부터 5까지 출력

#include <iostream>
 
int main() {
    int i = 1;
    do {
        std::cout << i << " ";
        i++;
    } while (i <= 5);
    std::cout << std::endl;
    return 0;
}
출력
1 2 3 4 5

 메뉴 선택 프로그램

#include <iostream>
 
int main() {
    int choice;
    do {
        std::cout << "\n1. 새 게임\n2. 불러오기\n3. 설정\n4. 종료\n선택: ";
        std::cin >> choice;
        
        switch (choice) {
            case 1: std::cout << "새 게임을 시작합니다.\n"; break;
            case 2: std::cout << "게임을 불러옵니다.\n"; break;
            case 3: std::cout << "설정 메뉴로 이동합니다.\n"; break;
            case 4: std::cout << "게임을 종료합니다.\n"; break;
            default: std::cout << "잘못된 선택입니다.\n";
        }
    } while (choice != 4);
    
    return 0;
}

 이 예제는 사용자가 종료 옵션을 선택할 때까지 메뉴를 반복해서 보여줍니다.

while vs do-while

  • while : 조건을 먼저 검사하고 코드를 실행
  • do-while : 코드를 먼저 실행하고 조건을 검사

 do-while은 코드 블록이 최소한 한 번은 실행되어야 할 때 사용합니다.

무한 루프와 break 문

 무한 루프는 조건이 항상 참인 반복문입니다. 특정 조건이 만족될 때까지 계속 실행되어야 하는 경우에 사용합니다.

#include <iostream>
 
int main() {
    int num = 0;
    while (true) {
        std::cout << "숫자를 입력하세요 (0을 입력하면 종료): ";
        std::cin >> num;
        if (num == 0) break;
        std::cout << "입력한 숫자: " << num << std::endl;
    }
    std::cout << "프로그램 종료" << std::endl;
    return 0;
}

continue 문

 continue 문은 현재 반복을 즉시 종료하고 다음 반복으로 넘어갑니다.

#include <iostream>
 
int main() {
    int i = 0;
    while (i < 10) {
        i++;
        if (i % 2 == 0) continue;
        std::cout << i << " ";
    }
    std::cout << std::endl;
    return 0;
}
출력
1 3 5 7 9

중첩된 반복문

 while과 do-while도 for 문과 마찬가지로 중첩하여 사용할 수 있습니다.

#include <iostream>
 
int main() {
    int i = 1;
    while (i <= 3) {
        int j = 1;
        while (j <= 3) {
            std::cout << i << "," << j << " ";
            j++;
        }
        std::cout << std::endl;
        i++;
    }
    return 0;
}
출력
1,1 1,2 1,3 
2,1 2,2 2,3 
3,1 3,2 3,3 

주의사항

  1. 무한 루프에 빠지지 않도록 주의해야 합니다. 반복문 내에서 조건을 변경하는 코드가 반드시 있어야 합니다.
  2. 조건문에서 변수를 변경할 때 주의해야 합니다. 특히 do-while에서 이런 실수가 발생하기 쉽습니다.
  3. 부동소수점 비교 시 주의가 필요합니다. 정확성 문제로 인해 예상치 못한 결과가 발생할 수 있습니다.
  4. break와 continue를 과도하게 사용하면 코드의 가독성이 떨어질 수 있으므로 주의해야 합니다.

연습 문제

  1. 사용자로부터 숫자를 입력받아 그 합을 계산하는 프로그램을 작성하세요. (0 입력 시 종료)
  2. 난수를 생성하고 사용자가 이를 맞추는 숫자 맞추기 게임을 작성하세요. 사용자의 입력이 높은지 낮은지 알려주어야 합니다.
  3. 문자열을 입력받아 각 문자를 역순으로 출력하는 프로그램을 작성하세요.

 참고자료