반응형
#include "pch.h"
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <stdio.h>
using namespace std;
class Survey {
public:
struct Survey_info {
string survey_array[10][5];
string survey_array_answer[10];
int exam_answer;
int survey_page;
Survey_info() {
memset(this, 0x00, sizeof(Survey_info));
};
}Survey_info_;
map<int, Survey_info> Survey_map;
void make_survey();
void Survey_Show();
int page = 1;
int show_number = 1;// 항목 개수
int qustion_count = 1;// 질문 개수
};
int main()
{
Survey Survey;
while (1) {
cout << "======================" << endl;
cout << "설문지 프로그램\n" << endl;
cout << "======================" << endl;
cout << "1.설문지 작성\n" << endl;
cout << "2.작성된 설문지 보기\n" << endl;
cout << "3.설문완료된 설문지 보기\n" << endl;
cout << "3.설문지 답변 하기\n" << endl;
cout << "=======================" << endl;
int sel;
cin >> sel;
switch (sel) {
case 1: {//설문지 작성
Survey.make_survey();
}break;
case 2: {//작성된 설문지 보기.
Survey.Survey_Show();
}break;
case 3: {
}break;
case 4: {
}break;
}
}
}
// 프로그램 실행: <Ctrl+F5> 또는 [디버그] > [디버깅하지 않고 시작] 메뉴
// 프로그램 디버그: <F5> 키 또는 [디버그] > [디버깅 시작] 메뉴
// 시작을 위한 팁:
// 1. [솔루션 탐색기] 창을 사용하여 파일을 추가/관리합니다.
// 2. [팀 탐색기] 창을 사용하여 소스 제어에 연결합니다.
// 3. [출력] 창을 사용하여 빌드 출력 및 기타 메시지를 확인합니다.
// 4. [오류 목록] 창을 사용하여 오류를 봅니다.
// 5. [프로젝트] > [새 항목 추가]로 이동하여 새 코드 파일을 만들거나, [프로젝트] > [기존 항목 추가]로 이동하여 기존 코드 파일을 프로젝트에 추가합니다.
// 6. 나중에 이 프로젝트를 다시 열려면 [파일] > [열기] > [프로젝트]로 이동하고 .sln 파일을 선택합니다.
void Survey::make_survey()
{
string str_survey;
cout << "=====================================\n" << endl;
cout << "=====================================\n" << endl;
cout << "종료 입력시 질문 등록이 종료 됩니다.\n" << endl;
cout << "=====================================\n" << endl;
cout << "=====================================\n" << endl;
while (1) {
cout << "질문을 등록하세요 \n" << endl;
cin >> str_survey;
string _str_qustion_count;
_str_qustion_count = to_string(qustion_count);
Survey_info_.survey_array[qustion_count - 1][0] = _str_qustion_count + "." + str_survey + "\0";
if (str_survey == "종료") {
Survey_info_.survey_array[qustion_count - 1][0] = "";
Survey_map.insert(pair<int, Survey_info>(page, Survey_info_));
//qustion_count--;
qustion_count = 1;
page++;
//number = 1;//질문 개수 종료시 초기화
memset(&Survey_info_, 0x00, sizeof(Survey_info));// 구조체 초기화 종료시에는 초기화 되어야 하므로.
return;
}
else {
cout << "보기를 몇개 등록 하세요? \n" << endl;
int count;
cin >> count;
cin.ignore();
for (int i = 1; i <= count; i++) {
string str_Exam_qustion;//보기 입력 받는 스트링
cout << "보기를 등록하세요 \n" << endl;
getline(cin, str_Exam_qustion);
//cin >> str_Exam_qustion;
Survey_info_.exam_answer = count;
Survey_info_.survey_array[qustion_count - 1][i] = str_Exam_qustion.substr() + '\0';
}
qustion_count++;
}
}
}
void Survey::Survey_Show()
{
map<int, Survey_info>::iterator iter;
for (iter = Survey_map.begin(); iter != Survey_map.end(); iter++) {
for (int j = 0; j <= qustion_count; j++) {
for (int i = 0; i <= iter->second.exam_answer; i++) {
string str_num; // 보기 번호 표시 위함.
int num = i;
if (i == 0) {
cout << iter->second.survey_array[j][i] << endl;
}
else {
if (iter->second.survey_array[j][i] != "") {// 보기 문항이 없을때
str_num = to_string(num);
num++;
cout << str_num + "." + iter->second.survey_array[j][i] << endl;
}
}
}
}
string str_page;
str_page = to_string(iter->first);
cout << "==============" << str_page + "page" << "================" << endl;//설문지 출력후(page) 라인 그리기.
}
}
아직 완벽하게 구현한건 아니지만 큰틀에서 설계? 는 끝났다고 볼수 있따......
망할 string 에다가 띄어쓰기를 입력시 프로그램이 죽어 버리는 현상이 발생해서 그거 때문에 애 먹었는데...
while문을 돌면서 cin을 계속 쓰다보니 이놈이 버퍼에 값이 남아 있어서 죽어 버리는거 같았다.
그래서 우선 적으로 숫자가 아닌 string을 입력 받기 전에는 항상 cin.ignore을 해줘야 하고.
string 입력시 그냥 cin 으로 밀어 넣으면 안되고, getline 이라는 함수를 통해서 넣도록 하자!
망할 C...... 하..... 2틀 개고생 함.
반응형
'프로그래밍 _공부자료. > C++ 공부' 카테고리의 다른 글
C# 유니티 오디오 컴퍼넌트 만들기. (0) | 2022.01.13 |
---|---|
유니티 C# 객체 끼리 충돌 할때 뭔가를 하고 싶을때 ??? 필요한 함수 (0) | 2022.01.06 |
배열을 활용하고 순서 짝수는 왼쪽으로 홀수는 오른쪽으로 정렬하여 출력하기. (0) | 2020.02.08 |
유클리드 기법을 활용하여 최대 공약수를 구하는법. (0) | 2020.02.07 |
C언어를 활용한 피보나치수열 입력 값 만큼 돌려 보기. (0) | 2020.02.05 |
댓글