1. 문제

 

11. 책의 년도, 책이름, 저자 이름을 담은 Book 클래스를 만들고, vector<Book> v;로 생성한 벡터를 이용하여 책을 입고하고, 저자와 년도로 검색하는 프로그램을 작성하라.

 

2. 결과

 

 

3. 코드

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Book {
	int year;
	string name;
	string writer;
public:
	void setInfo(int ye, string na, string wr) {
		year = ye;
		name = na;
		writer = wr;
	}
	int getYear() { return year; }
	string getWriter() { return writer; }
	void search() { cout << year << "년도, " << name << ", " << writer << endl; }
};

int main() {

	vector<Book> v;
	Book b;
	int year; string name, writer;

	cout << "입고할 책을 입력하세요. 년도에 -1를 입력하면 입고를 종료합니다." << endl;
	while (1) {
		
		cout << "년도>>"; cin >> year;
		if (year == -1) break;
		//fflush(stdin);
		while (getchar() != '\n');

		cout << "책이름>>"; getline(cin, name);
		cout << "저자>>"; getline(cin, writer);

		b.setInfo(year, name, writer);
		v.push_back(b);
	}
	int num = v.size();
	cout << "총 입고된 책은 " << num << "권입니다." << endl;
	cout << "검색하고자 하는 저자 이름을 입력하세요>>";
	//fflush(stdin);
	while (getchar() != '\n');
	getline(cin, writer);

	for (int i = 0; i< num; i++)
		if (v[i].getWriter() == writer) v[i].search();

	cout << "검색하고자 하는 년도를 입력하세요>>";
	cin >> year;

	for (int i = 0; i< num; i++)
		if (v[i].getYear() == year) v[i].search();
}

 

4. 설명

 

 

fflush(stdin)으로 버퍼를 비워주는 것이 visual studio 2017에서 먹히지 않아서 달리 버퍼를 지워주는 while( getchar() != '\n' ); 을 삽입해 주었습니다.

 

 

아마 2015년 버전 이후부터 보안상으로 막아 논 것 같습니다.

 

+ Recent posts