C++ while문
구구단을 외자 게임 만들기
앞에서 설명한 반복문(for문)은 카운팅을 통해 정해진 횟수만큼 루프를 돈다.
그렇다면 조건이 참일 때까지 반복을 하려면 어떻게 해야 할까? 이 때는 for문 대신 while문이 더 적합하다.
char input = 'N';
while (input != 'Y') {
cout << "프로그램을 종료하시겠습니까? (Y/N)" << endl;
cin >> input;
}
위의 코드는 프로그램은 사용자로부터 Y라는 단어가 나오기 전까지 사용자의 입력을 받아내는 프로그램이다. Y를 입력하기 전까지 계속 루프를 돌게 된다. for문과의 차이를 알겠는가?
만약 무한히 돌고 싶은 프로그램을 만드려면 어떻게 해야할까? 아래와 같이 하면 무한히 도는 프로그램이 된다.
while(true) {
// 코드
}
무한히 돌면 언제 프로그램이 종료된단 말인가? 강제적으로 멈추게 하려면 코드 안에 break;를 넣어주면 된다.
아래 코드는 사용자로부터 10을 입력받으면 멈추게 되는 코드이다.
while(true) {
cin >> X;
if (X == 10) {
break;
}
}
마지막으로 do-while문이 있긴 하지만 파이썬에는 없는 문법이므로 패스하겠다.
한 가지 재밌는 프로그램을 만들기 위해 랜덤 한 수를 출력하는 방법을 알아보자.
각 언어마다 랜덤 한 수를 만드는 방법은 다르다. C++은 random 라이브러리를 이용하면 되는데 조금 복잡하다. 그냥 가볍게 함수를 만들어서 쓰자. 굳이 이해할 필요 없다. 필요한 기능은 구글이 해결해줄 것이다.
int getRandomNumber (int min, int max) {
// 씨드 설정
random_device rd;
mt19937 seed(rd());
//분포 설정
uniform_int_distribution<int> range(min, max);
//랜덤 값 생성
return range(seed);
}
위 함수에 출력될 범위를 지정해주면 그 안에 있는 숫자가 랜덤 하게 생성된다.
int A = getRandomNumber(1,100);
이 코드는 1부터 100 사이에 있는 코드를 랜덤 하게 받는 구문이다.
이제 구구단을 외자 게임을 만들어보자.
코드는 다음과 같다.
#include <iostream>
#include <random>
using namespace std;
int getRandomNumber (int min, int max) {
// 씨드 설정
random_device rd;
mt19937 seed(rd());
//분포 설정
uniform_int_distribution<int> range(min, max);
//랜덤 값 생성
return range(seed);
}
int main()
{
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<int> rand_A(2, 9);
uniform_int_distribution<int> rand_B(1, 9);
while(true) {
int A = getRandomNumber(2,9);
int B = getRandomNumber(1,9);
int C;
cout << "구구단을 외자: " << A << " X " << B << "=" << endl;
cin >> C;
if (A*B == C) {
cout << "정답입니다" << endl;
break;
} else {
cout << "틀렸습니다.";
}
}
return 0;
}