반복문 첫 시간에서는 for문과 ++ 연산자를 이용해서 반복출력을 어떻게 처리하는지 알아봤습니다.
이번에는 반복문의 또 다른 주인공인 while문과 do while문을 간단히 배워볼 겁니다.
이후 중첩(이중, 삼중) 반복문까지 배우고나면 지금까지 배운 지식들을 활용해서 별 쌓기, 더 나아가 피라미드 쌓기 까지 만들어 보겠습니다.
while
while은 영어로 "~하는 동안"이라는 뜻을 가지고 있습니다.
즉, 조건이 참일 때까지 계속 실행한다는 의미에서 이름이 while입니다.
말 그대로 "무언가가 참인 동안 계속~~해라"라는 뜻인 거죠.
while문의 기본 구조는 이렇게 생겼습니다.
while (조건식) {
반복할 코드;
}
while 뒤에 조건이 될 식을 입력하고, 그 아래에는 반복할 코드가 오면 되는 것이죠.
i라는 변수명에 1이라는 값을 주고, while문 하나만으로 1부터 10까지 출력하게 하려면 어떻게 해야 할까요?
먼저 변수명을 정해주고, 그 뒤에 while문으로 조건을 걸어주고, 그 다음 결과를 어떻게 출력할지를 입력하면 되겠죠.
int i = 1;
while (i <= 10) {
printf("지금 이 줄의 숫자는? : %d\n", i);
i++;
자 이런식으로 한다면, "지금 이 줄의 숫자는?"이 1부터 10까지 반복해서 나오게 될 겁니다.
한번 어떤원리로 이렇게 됐는지 한줄한줄씩 코드를 풀어봅시다.
int i = 1;
→ 숫자 i를 1로 시작합니다.
while (i <= 10)
→ i가 10보다 작거나 같은 동안에는 아래에 적힌 코드를 반복합니다.
printf("지금 이 줄의 숫자는? %d\n", i);
→ 현재 i가 몇인지 출력해줍니다.
i++;
→ i를 1 증가시켜서 다음 반복을 준비합니다.
결과적으로 i는 1부터 10까지 총 10번 반복하며 출력됩니다.
한가지 팁은, i++이 굳이 printf이후에 나올 필요는 없다는 것입니다. 그 전에 변수 i를 지정해줄 때 ++를 붙여도 됩니다.
int i = 1;
while (i <= 10) {
printf("지금 이 줄의 숫자는? : %d\n", i++);
즉, 이렇게 코드를 짜도 결과는 똑같이 나온다는 거죠.
⚠️ while문에서 주의할 점
❗ 무한 루프 주의
만약 i++;를 빼먹는다면?
int i = 0;
while (i <= 10) {
printf("%d\n", i);
// i++; ← 이걸 안 쓰면?
}
이 코드는 i가 0인 상태에서 계속 반복되며, 무한 루프에 빠지게 됩니다.
(컴퓨터가 멈출 때까지 똑같은 숫자만 찍게 되죠)
지금까지 스터디를 잘 따라오고 있었다면, 지금쯤 한 가지 의문이 드실 수 있을 겁니다.
'그럼 for문과 while문은 대체 뭐가 다른거지?'
생각해보니 둘 다 그놈이 그놈 같습니다.
그래서 이 부분은 표를 이용해 직관적으로 비교해보겠습니다.
항목 | for문 | while문 |
반복횟수 명확 | 적합 ✅ | 가능은 하지만 덜 직관적 |
조건만으로 반복 | 조금 불편함 | 적합 ✅ |
무한루프 코드 | 약간 덜 편함 | 더 간단함 ✅ |
코드 구성 | 한 줄에 다 표현 | 조금 더 자유롭게 구성 |
요약하자면:
for문은 반복 횟수가 뚜렷할 때
while문은 조건만으로 판단할 때 적합합니다.
do while
while 다음으로 알아볼 반복문은 바로 do while입니다.
do while의 기본 구조는 이렇습니다.
do {
반복할 코드;
} while (조건);
이전까지 봤던 for문이나 while문과는 순서가 조금 다르죠?
while은 조건을 먼저 확인하고 실행하지만
do while은 무조건 한 번 실행한 후에 조건을 확인합니다.
즉, while과 do while은 조건과 실행의 순서가 다르다는 뜻입니다.
while에서 썼던 예제 코드를 do while버전으로 다시 만들어 봅시다.
int i = 1;
do {
printf("지금 이 줄의 숫자는? : %d\n", i++);
} while (i <= 10);
do while은 실행을 먼저 하고 조건이 나오기 때문에, while과는 반대로 printf가 먼저 나옵니다.
이 코드도 천천히 하나하나 뜯어봅시다.
int i = 1;
→ i라는 숫자 변수에 1을 저장합니다.
do { ... } while (i <= 10);
→ do 블록 안의 내용을 무조건 한 번 실행합니다.
printf("지금 이 줄의 숫자는? : %d\n", i++);
→ 현재 i 값을 출력하고, i를 1만큼 증가시킵니다.
이 과정을 i가 10보다 작거나 같게 될때까지 다시 반복합니다.
while문과 do while문의 차이도 표로 확인해 보겠습니다.
비교 항목 | while문 | do while문 |
실행 순서 | 조건 먼저 확인 → 실행 | 실행 먼저 → 조건 확인 |
조건이 처음부터 false라면? | 한 번도 실행 안 됨 | 무조건 한 번은 실행됨 |
사용 예 | 조건에 따라 실행 여부가 중요한 경우 | 일단 한 번 실행하고 판단하는 경우 |
while문과 do while문의 차이를 확연히 느낄 수 있는 예시를 하나 만들어 봅시다.
만약 우리가 입력한 조건 자체가 '거짓'이라 실행이 안된다면??
먼저 변수 i 에 11이란 값을 주고, while문으로 i <= 10을 적어봅시다.
while문은 i가 10보다 작거나 같을 때 실행되는데, i라는 변수값 자체가 10을 초과한 11이기 때문에 해당 명제는 시작부터 '거짓'이 됩니다.
while문, do while문 예시
int i = 11;
while (i <= 10) {
printf("hello\n");
}
→ while문은 이처럼 조건이 처음부터 거짓이므로 한 번도 실행되지 않습니다.
int i = 11;
do {
printf("hello\n");
} while (i <= 10);
→ 반면 do while은 조건은 똑같이 거짓이지만 일단 hello는 한 번 출력되게 됩니다.
그렇다면 do while은 언제 쓰면 좋을까요? 바로 사용자에게 한 번은 반드시 무언가를 시도하게 하고 싶은 경우에 좋습니다.
(예: 메뉴 출력, 비밀번호 입력 시도, 게임 재시작 여부 묻기 등)
정말정말 쉽게 비유를 들자면
while은 신중한 성격, 먼저 물어보고 행동하는 스타일
do while은 일단 해보고 나중에 확인하는 스타일인거죠.
AI피드백
Q. 오늘은 반복문에서 while과 do while에 대해서 배웠어. for 반복문과 비슷한점이 많은 거 같은데, 실제 코딩 환경에서는 for와 while이 어떤식으로 구분돼서 쓰이는지, 또 실제 개발환경에서 얼마나 자주 쓰이는지를 알려줄 수 있어??
그리고 오늘배운 이 세가지를 가지고 풀 수 있는 예제문제를 하나당 5개씩 총 15개를 만들어 줄 수 있을까?? 문제의 난이도는 쉬움, 중간, 어려움 이렇게 총 3단계로 조절해서 만들어주면 좋겠어
A. 아주 중요한 내용을 공부했구나!
for / while / do-while 이 세 반복문은 기본 구조는 유사하지만, 실제로는 쓰임새가 분명히 다르기 때문에 실무에서도 목적에 맞게 잘 구분해서 사용돼.
✅ 실제 개발 환경에서 반복문의 쓰임 구분
반복문 | 언제 쓰는가 | 실제 쓰임새 | 사용 빈도 |
for | 반복 횟수를 미리 알고 있을 때 | 배열 탐색, 카운터 반복, 반복 조건 명확한 경우 | ✅ 매우 자주 |
while | 반복 횟수를 모를 때, 조건만 중요할 때 | 파일 끝까지 읽기, 입력 대기, 무한루프 | ✅ 매우 자주 |
do-while | 조건과 상관없이 최소 1번은 실행해야 할 때 | 사용자 입력 받기, 메뉴 반복, 초기화 작업 | ⚠️ 상대적으로 드물지만 확실한 쓰임 존재 |
🖋️ 예시로 정리하면
- for: "10번 돌려!"
- while: "비밀번호 맞을 때까지 계속 돌려!"
- do-while: "무조건 1번 실행하고 나서, 그다음 조건 검사해!"
🧩 예제 문제: 총 15개 (난이도별 3단계)
각 반복문마다 쉬움/중간/어려움 3단계로 5문제씩 준비했어
🔵 1. for문 활용 문제 (총 5개)
쉬움 | 1부터 10까지 숫자를 출력해보세요 |
쉬움 | 1부터 20까지 짝수만 출력해보세요 |
중간 | 구구단 2단부터 5단까지 출력해보세요 |
중간 | 1부터 100까지의 총합을 구해보세요 |
어려움 | 사용자가 입력한 정수의 각 자리 수를 거꾸로 출력해보세요 (예: 1234 → 4 3 2 1) |
🟢 2. while문 활용 문제 (총 5개)
쉬움 | 1부터 10까지 숫자를 while문으로 출력해보세요 |
쉬움 | 10부터 1까지 감소하며 출력해보세요 |
중간 | 사용자에게 정수를 입력받아 0이 입력될 때까지 계속 입력받는 프로그램을 만드세요 |
중간 | 특정 조건(예: 입력이 5의 배수일 때)에만 "정답!"을 출력하는 프로그램을 작성해보세요 |
어려움 | 사용자로부터 암호를 입력받고, 맞을 때까지 반복하게 하세요 (정답: "apple") |
🔴 3. while문 활용 문제 (총 5개)
쉬움 | do-while문으로 1~5까지 숫자를 출력해보세요 |
쉬움 | 메뉴 선택 기능을 구현하세요 (1. 시작 2. 종료), 종료가 선택될 때까지 반복 |
중간 | 사용자에게 "다시 할까요? (y/n)"를 묻고, y일 때만 반복하는 구조를 만들어보세요 |
중간 | 숫자 맞히기 게임: 1~10 중 정답 숫자를 랜덤으로 정해두고, 맞힐 때까지 반복 입력 |
어려움 | 사용자에게 이름과 나이를 입력받아 "이름: OOO / 나이: XX"를 출력하고, 반복 여부를 묻는 시스템을 만들어보세요 |
💬 보너스 팁
- 실제 개발환경에선 for와 while이 거의 90% 이상을 차지해
- do-while은 사용자 입력 처리 루프나 메뉴 반복 등에 주로 쓰이고, 자주는 아니지만 없으면 곤란한 시나리오에 반드시 필요해
Q. 그럼 for랑 while을 비밀번호 입력에 쓸 때를 예시로 들어보면,
for는 비밀번호를 여러번 틀리면 계정을 일시적으로 잠그거나 할 때 쓰이고
while은 그런거 상관없이 비밀번호를 맞출 때 까지 입력할 수 있게 할 때 쓰인다는거네? do while은??
A. 맞아! 😎 for는 제한된 시도, while은 무제한 시도,
그리고 이제 궁금한 **do-while은 "무조건 1번은 실행되는 상황"**에 딱이야.
이제 세 가지를 모두 실제 **"비밀번호 입력 상황"**에 비유해서 아주 쉽게 정리해줄게.
🔐 비밀번호 입력 예시로 비교
✅ for문: 횟수 제한이 있는 로그인 시스템
// 최대 5번까지만 입력 가능
for (int attempt = 1; attempt <= 5; attempt++) {
printf("비밀번호를 입력하세요: ");
scanf("%s", input);
if (strcmp(input, "apple") == 0) {
printf("로그인 성공!\n");
break;
}
printf("비밀번호가 틀렸습니다. (%d/5)\n", attempt);
}
🔸 특징: 시도 횟수 제한 있음
🔸 쓰임: 보안 강화, 계정 잠금, 로그인 시도 제한 등
✅ while문: 정답이 나올 때까지 반복
char input[100];
printf("비밀번호를 입력하세요: ");
scanf("%s", input);
while (strcmp(input, "apple") != 0) {
printf("틀렸습니다. 다시 입력하세요: ");
scanf("%s", input);
}
printf("로그인 성공!\n");
🔸 특징: 맞출 때까지 무제한 시도 가능
🔸 쓰임: 연습용 시스템, 시험 앱, 실내 키오스크 등
✅ do-while문: 입력은 무조건 1번은 받아야 하는 경우
char input[100];
do {
printf("비밀번호를 입력하세요: ");
scanf("%s", input);
if (strcmp(input, "apple") != 0)
printf("틀렸습니다. 다시 시도하세요.\n");
} while (strcmp(input, "apple") != 0);
printf("로그인 성공!\n");
🔸 특징: 무조건 1번은 실행 후 조건을 검사함
🔸 쓰임: 사용자 입력이 무조건 1회는 필요할 때 / 메뉴 선택, 입력 검증, 약관 동의 등 / “초기화 후 반복”이 필요한 시스템
🎯 정리표
반복문 | 용도 | 특징 |
for | 제한된 횟수만큼 시도 | 시도 제한이 필요한 상황 |
while | 정답 맞출 때까지 반복 | 조건 먼저 검사, 무제한 반복 |
do-while | 무조건 한 번은 실행 후 조건 검사 | 첫 입력이 필수일 때 적합 |
'C++ > 입문' 카테고리의 다른 글
[#6] 반복문을 이용해서 피라미드 게임 만들기 (3) | 2025.06.02 |
---|---|
[#5] 중첩(이중, 삼중) 반복문과 별 쌓기 (4) | 2025.05.30 |
[#3] 반복문(++, for)과 초보 프로그래머의 첫번째 벽, 별쌓기 게임 만들기 (1) | 2025.05.28 |
[#2] 문자와 문자열, 그리고 게임 완성하기 (6) | 2025.05.24 |
[#1] 정수, 변수, 주석으로 '경찰서 조서 쓰는 게임' 만들어보기 (1) | 2025.05.23 |