1. 문제
12. Open Challenge를 수정하여 사용자가 어휘를 삽입할 수 있도록 기능을 추가하라.
실행 예는 다음과 같다.
2. 결과
3. 코드
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;
class Word {
string en;
string ko;
public:
Word() { en = ""; ko = ""; }
Word(string en, string ko) {
this->en = en; this->ko = ko;
}
void setEnKo(string en, string ko) { this->en = en; this->ko = ko; }
string getEn() { return en; }
string getKo() { return ko; }
};
int main() {
vector<Word> v;
Word w;
v.push_back(Word("human", "인간"));
v.push_back(Word("society", "사회"));
v.push_back(Word("dall", "인형"));
v.push_back(Word("emotion", "감정"));
v.push_back(Word("painting", "그림"));
v.push_back(Word("trade", "거래"));
v.push_back(Word("animal", "동물"));
v.push_back(Word("photo", "사진"));
v.push_back(Word("bear", "곰"));
srand((unsigned)time(0));
int n1; string answer;
string bogi[4]; for (int i = 0; i<4; i++) bogi[i] = "";
int number[4]; for (int i = 0; i<4; i++) number[i] = 0;
int i;
bool exit = true, exit2 = true;
int sel;
string e, k;
cout << "***** 영어 어휘 테스트를 시작합니다. *****" << endl;
while (exit2) {
exit = true;
cout << "어휘 삽입: 1, 어휘 테스트 : 2, 프로그램 종료:그외키 >> ";
cin >> sel;
switch (sel) {
case 1:
cout << "영어 단어에 exit을 입력하면 입력 끝" << endl;
//fflush(stdin);
while (getchar() != '\n');
while (1) {
cout << "영어 >>"; getline(cin, e);
if (e == "exit") break;
cout << "한글 >>"; getline(cin, k);
w.setEnKo(e, k);
v.push_back(w);
}
break;
case 2:
cout << "영어 어휘 테스트를 시작합니다. 1~4 외 다른 입력시 종료합니다." << endl;
while (exit) {
n1 = rand() % v.size();
bogi[0] = v.at(n1).getKo();
answer = bogi[0];
cout << v.at(n1).getEn() << "?" << endl;
while (exit) { // 중복되지 않는 보기 만들기
for (i = 1; i<4; i++) {
n1 = rand() % v.size();
bogi[i] = v.at(n1).getKo();
}
if (bogi[0] != bogi[1] && bogi[0] != bogi[2] && bogi[0] != bogi[3] &&
bogi[1] != bogi[2] && bogi[1] != bogi[3] && bogi[2] != bogi[3])
exit = false;
}
exit = true;
number[0] = rand() % 4;
while (exit) { //보기 순서 섞기
for (i = 1; i<4; i++) {
number[i] = rand() % 4;
}
if (number[0] != number[1] && number[0] != number[2] && number[0] != number[3] &&
number[1] != number[2] && number[1] != number[3] && number[2] != number[3])
exit = false;
}
exit = true;
int result;
for (i = 1; i<5; i++)
cout << "(" << i << ") " << bogi[number[i - 1]] << " ";
cout << ":>";
cin >> result;
if (result != 1 && result != 2 && result != 3 && result != 4) //순서 중요 먼저 1, 2, 3, 4 이외의 값인지 확인해야함
exit = false;
else if (answer == bogi[number[result - 1]])
cout << "Excellent !!" << endl;
else if (result == 1 || result == 2 || result == 3 || result == 4)
cout << "No. !!" << endl;
}
break;
default:
exit2 = false;
break;
}
cout << endl;
}
}
4. 설명
주의 하실점이라면 퀴즈를 푼 후 어휘를 삽입할려고 할 시 먼저 입력 버퍼를 비워준 후 단어를 입력 받아야 합니다.
전글에서 이야기 했듯이 while( getchar() != '\n');을 이용하여서 입력버퍼를 비워 줍니다.
대부분 앞의 문제들에서 사용하였던 것이고, 주석으로 무엇을 구현한 것인지 간략히 구분해 놨으므로 이해하시는데는 큰 문제 없으실겁니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 10장 14번 (0) | 2019.05.14 |
---|---|
명품 C++ programming 실습문제 10장 13번 (0) | 2019.05.13 |
명품 C++ programming 실습문제 10장 11번 (0) | 2019.05.13 |
명품 C++ programming 실습문제 10장 10번 (0) | 2019.05.12 |
명품 C++ programming 실습문제 10장 9번 (0) | 2019.05.12 |