#include <iostream>
#include <windows.h>
#include <thread>
#include <string>
#include <list>
#include <random>
#include <cassert>
#include <time.h>

using namespace std;

void sleepForSeconds(int second);

void countDown(int second);

string getMember(int index, list<string> members);

int main(void)
{
    const int COUNT_SECONDS = 5;
    const int SLEEP_SECONDS = 1;

    int index = 0;
    string challenge_word;
    list<string> uniqueMembers;
    string current_line;
    string previous_line = "ERROR";
    bool is_time = true;
    bool is_name = false;
    bool is_comment = false;
    int luckyIndex;
    string luckyMember;

    cout << "도전 키워드를 입력해주세요\n\n";

    cin >> challenge_word;

    cout << "\n이번 이벤트의 도전 키워드는 \"" << challenge_word << "\" 입니다.\n";
    cout << challenge_word << "를 댓글에 입력해주세요\n\n";

    cout << "댓글 내용을 붙여넣고 마지막에 \"quit\"을 입력 후 엔터를 입력해주세요.\n\n";

    getline(cin, current_line);
    while (!(is_time && current_line.compare("quit") == 0)) {
        if (current_line.compare("") == 0) {
            is_time = true;
            is_name = false;
            is_comment = false;
        }
        else if (is_time) {
            is_time = false;
            is_name = true;
        }
        else if (is_name) {
            is_name = false;
            is_comment = true;
        }
        else if (is_comment) {
            is_comment = false;
            if (current_line.find(challenge_word) != string::npos) {
                uniqueMembers.remove(previous_line);
                uniqueMembers.push_back(previous_line);
            }
        }
        previous_line = current_line;
        getline(cin, current_line);
    }

    cout << "\n입력이 완료되었습니다.\n\n";

    sleepForSeconds(SLEEP_SECONDS);

    if (uniqueMembers.size() == 0) {
        cout << "참가자가 없습니다.\n";
        cout << "프로그램을 종료합니다.\n";
        return 1;
    }

    cout << "이번 이벤트에 " << uniqueMembers.size() << "분께서 참여해주셨습니다.\n";
    sleepForSeconds(SLEEP_SECONDS);
    cout << "성원에 감사드립니다.\n\n";
    sleepForSeconds(SLEEP_SECONDS);

    cout << "================참가자  명단================\n";
    index = 0;
    for (list<string>::const_iterator member = uniqueMembers.begin(); member != uniqueMembers.end(); ++member) {
        if (index > 0) {
            cout << ", ";
        }
        if (index % 5 == 0) {
            cout << "\b\b";
        }
        cout << "<" << member->c_str() << ">님";
        if (index % 5 == 4) {
            cout << "\n";
        }
        index++;
    }
    cout << "\n============================================\n\n";
    sleepForSeconds(SLEEP_SECONDS);

    cout << "추첨을 시작하겠습니다.\n";

    countDown(COUNT_SECONDS);
    
    srand(time(NULL));
    luckyIndex = rand() % uniqueMembers.size();
    luckyMember = getMember(luckyIndex, uniqueMembers);

    cout << "\n" << luckyMember.c_str() << " 님 축하드립니다.\n\n";

    sleepForSeconds(SLEEP_SECONDS);

    do {
        cout << "프로그램을 종료하시려면 q를 입력하고 엔터를 입력해주세요.\n";
    } while (cin.get() != 'q');

    cout << "프로그램을 종료합니다.\n";

    return 0;
}

void sleepForSeconds(int second)
{
    Sleep(second * 1000);
}

void countDown(int second)
{
    for (int i = second; i > 0; --i) {
        cout << i;
        for (int j = 0; j < 5; ++j) {
            Sleep(200);
            cout << ".";
        }
        cout << "\n";
    }
}

string getMember(int index, list<string> members)
{
    int i = 0;
    for (list<string>::const_iterator member = members.begin(); member != members.end(); ++member) {
        if (i++ == index) {
            return member->c_str();
        }
    }
    assert(1);
    return "ERROR";
}

생각나는 대로 업데이트 하겠습니다.

 

1. 네트워크 : 성공과 실패를 결정하는 1%의 네트워크원리

2. 리눅스 커널 : 디버깅을 통해배우는 리눅스커널의 구조와 원리

3. 임베디드 : 임베디드 레시피, 짜릿 짜릿 전자회로 DIY 

4. 개발자 가이드 : 프로그래머의 길 멘토에게 묻다

5. 컴퓨터 구조 : 밑바닥부터 만드는 컴퓨터 시스템, 

6. JAVA : Head First JAVA, 이펙티브 자바

7. C# : C# 7.3 프로그래밍(위키북스, 7.3에서 더 업데이트 된 상황)

8. 스프링 개념 : 스프링 입문을 위한 자바객체지향의 원리와 이해

9. 웹 앱 입문 및 교양서적 : 비전공자를 위한 이해할 수 있는 IT 지식 

10. 블록체인 입문 : 블록체인 무엇인가(이지스퍼브리싱)

11. 임베디드+OS : 임베디드 OS 개발 프로젝트, 임베디드 레시피, 임베디드 엔지니어 교과서

 

내가 살다 살다 어이가 없어서.. 이곳에 남긴다.

대한민국 법원 인터넷 등기소에서 법인 등기를 진행하고 있었다.

모든 과정이 끝나고, 감사로 등록된 아내의 전자 승인만 하면 되는 상황이었다.

 

근데 아내 아이디로만 접속하면, 승인이 안되는 것이다.

아무런 반응도 없다.

내 아이디는 승인 누르면 다음으로 진행 되는데..

아내 아이디는 아무런 반응이 없다.. 

너무 화가 났다.

그래도 직업이 개발자인데.. 혹시나 하는 마음에 디버깅을 해봤다.

 

 

버튼을 누를때마다, 위 로고가 떴다.

그래서  해당 소스로 찾아 갔다.

원인은 f_sign함수에서 발생했는데.. 아래 표시한 부분이 null로 넘어오면서 다음으로 진행이 안되는 것이 었다.

그래서 위 값들이 어디서 넘어 오나 봤더니..

폼데이터에서 넘어 오는 것이다..

그래서 html 부분을 수정했다.

 

위 부분을 추가로 넣어 줬다.

그랬더니.. 다음으로 진행이 되었다.

아니 도대체 일반 사용자들은 어떻게 이걸 한단 말인가...

정부 공식 웹페이지가 이런 버그가 있다는게 속상하고, 이렇게 고쳐서 되는것도 너무 황당하다.

아무튼 아래와 같이 정상 승인 되었다.

 

 

컴파일 방법

gcc -o server server.c -lpthread

gcc -o client client.c -lpthread

 

 

채팅 프로그램.zip
0.00MB

'프로그래밍 강의 > C 언어' 카테고리의 다른 글

추첨 프로그램 소스  (0) 2021.12.04

그동안 유튜브에 집중하느라, 블로그에 글을 올리지 못 했습니다.

오늘 날짜로 부터 두가지 카테고리에 집중해서 글을 올리려고 합니다.

 

1. 책에 쓰고 싶은 이야기

  - 개발자를 꿈꾸는 사람들에게 하고 싶은 이야기

  - 개발의 전체적인 지도를 그리는 것에 도움을 주는 이야기

 

2. 유튜브에서 하지 못한 이야기.

 - 평소에 가지고 있는 생각.

 - 고민 했던 내용들.

 - 민감한 주제들.

 

 

OJ Tube 및 저에게 건의사항이 있으시면 댓글로 남겨주세요.

따로 별도의 게시판 기능이 없는 것 같아서..
그냥 하시고 싶은 말씀 있으시면, 여기에 댓글로 남겨주세요.

CRC 구하는 프로젝트 2개 첨부합니다.

개발 환경은 visual studio 2017입니다.

CRC 예제 프로그램.zip
0.00MB
CRC 완전 기본만.zip
0.00MB

+ Recent posts