#include<iostream>
#include<sstream>
#include<queue>
#include<string>
#include<Windows.h>

//구글에 흔한거

void gotoxy(int x, int y)
{
 COORD pos{ x,y };
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

//fflush로는 안깨끗해지는 경향이 있어서 만든 콘솔청소
void CLEAR_frame(int size)
{
 gotoxy(0, 1);
 for (int i = 0; i < size; i++)
 {
  std::cout << "│                                                  │";
  gotoxy(0, 2 + i);//왜여기더라? 까먹음
 }

//19번째줄은 내가 글을쓸곳
 gotoxy(0, 19);
 std::cout << "│                                                  │";
}

//채팅 뼈대

void Frame()
{
 gotoxy(0, 0);//첫줄 시작지점표현
 std::cout << "┌─────────────────────────┐" << std::endl;
 for (int i = 0; i < 20; i++)
 {
  gotoxy(0, 1 + i);//끝줄마다 표현
  std::cout << "│                                                  │" << std::endl;
 }
 gotoxy(0, 18);//표현창끝 + 채팅창시작
 std::cout << "├─────────────────────────┤" << std::endl;
 gotoxy(0, 20);//채팅창끝
 std::cout << "└─────────────────────────┘" << std::endl;
 gotoxy(0, 20);
}

//글을 읽어들이는곳

void Read(std::queue<std::string> *Writer)
{
 gotoxy(3, 1);//3,1번째 자리부터 시작할거임
 while (Writer->size() >= 15)//만약 queue의 길이가 15이상이면
 {
  Writer->pop();//이걸 지움
 }

//뼈대청소 < 지운게 있으면 그 지운부분은 안보여야 하니깐
 CLEAR_frame(Writer->size());

//Writer복제해서  출력함
 auto temp = *Writer;

 for (int i = 0; i < Writer->size(); i++)
 {

  gotoxy(3, 1 + i);//3번째자리는 뼈대고  i+1번째줄마다 출력
  std::cout << temp.front();//맨위의글을꺼냄
  temp.pop();//맨위의글을 버림
 }

}

//청소기, flush 맘에안듬
void Refresh(std::ostringstream &paper)
{

//일단 ""이걸로도 충분할건데
 paper.str("");

//혹시나해서
 paper.clear();
}

//글을 입력받는곳
void Write(std::ostream & stream, std::queue<std::string>* Writer)
{

//이렇게 함으로써 string받고 뭐시기하고 하는 번거로움을 줄임
 std::string be = dynamic_cast<std::ostringstream&>(stream).str();//이거전부 string이란뜻ㅎ
 Writer->push(be);//입력한걸 집어넣음

 Refresh(static_cast<std::ostringstream&>(stream));//입력한거 청소
}


void main()
{
 std::ostringstream oss;//원래 iss로 해야할걸? 이대로가면 뚝배기 다섯개깨집니다^^
 std::queue<std::string> clerk;//작사던가 집필자던가? 그거 약자임 채팅창을 써내릴사람
 std ::string text;//내가쓴글
 Frame();//뼈대넣고
 while (true)//게임루프
 {
  gotoxy(3, 19);//19번째(채팅입력란)으로 감으로써 내가 채팅창에 글을쓰는 착시를냄

  getline(std::cin, text);//내가쓴 라인을 전부 text로 옮김
  std::istringstream ss(text);//ostringstream의 반대 string수준으로 stream으로 넣는다? 이런느낌일걸
  Write(oss << text, &clerk);//oss에 입력은 못받고iss에 입력을받아서 그걸 oss에다가 출력하는 느낌으로 해야함
  Read(&clerk);//입력다했으면 글쓴걸 보여줄차례

 }

}

는 내가 c++로 짠기능중 가장 잘한거ㅎ 적어도 좆문대 상위 80% 수준은 할거같음ㅎ

실무에서 이렇게쓰면 뚝배기 깨질듯