[2025.03.15 - 2025.03.16] (주말과제) C언어 로또 프로그램 만들기_개발완료보고서

2025. 3. 17. 20:40·C/개인프로젝트01 - 로또

 

[개발 완료 보고서]

 

 

[순서도]

 

 

 

 

 

[코드]

// 2025.03.15. (일) - 로또 만들기 과제

#include <stdio.h>
#include <string.h>
#include <time.h> // 랜덤 숫자 뽑으려고 씀.
#include <stdlib.h> // 오름차순 정렬 함수 쓰기 위해서 씀.
#include <ctype.h> // isalpha 함수 쓰기 위해서 씀.


// 오름차순 하기위한 함수
int compare(const int* a, const int* b)
{
	return(*a - *b);
}

int user_num_input (int input_num_count, int user_num, int user_num_list[6], int len_user_num_list) // 사용자 숫자 입력 함수
{
    while(input_num_count < 6) // 사용자 6개 숫자 입력
    {
        int switch1 = 0;
        printf("6개의 숫자를 입력해주세요. : ");
        // getchar(); // 문자 입력 처리 ==> 아직 완벽하지 않음.
        scanf("%d", &user_num);

        // if (isalpha(user_num) != 0) // 문자 입력 처리 ==> 아직 완벽하지 않음.
        // {
        //     printf("다시입력하세요!\n");
        //     continue;
        // }

        if (user_num < 1 || user_num > 45) // 범위 외 숫자 입력 처리
        {
            printf("다시입력하세요!\n");
            continue;
        }

        for (int j = 0 ; j < len_user_num_list ; j++) // 중복숫자 입력 처리
        {
            if (user_num == user_num_list[j])
            {
                switch1 = 1;
                break;
            }
        }
        if (switch1 == 1)
        {
            printf("중복된 숫자 입니다. 다시 입력하세요.\n");
            continue;
        }
        user_num_list[input_num_count] = user_num; // 정상 입력 숫자는 배열에 추가
        input_num_count++;
    }
    return user_num_list;
}



int com_random_num (int com_num_list[7], int len_com_num_list) // 당첨번호 랜덤 추첨 (6 + 1)
{
    while(1)
    {
        int switch2 = 0;
        int switch3 = 0;
        for (int i = 0 ; i < len_com_num_list ; i++)
        {
            com_num_list[i] = (rand() % 45) + 1;
        }
        if (switch2 == 0)
        {
            for (int i = 0 ; i < len_com_num_list ; i++)
            {
                if (switch3 == 0)
                {
                    for (int j = i+1 ; j < len_com_num_list ; j++)
                    {
                        if (com_num_list[i] == com_num_list[j])
                        {
                            switch2 = 1;
                            switch3 = 1;
                            break;
                        }
                    }
                }
                if (switch2 == 1)
                {
                    break;
                }
            }
        }
        if (switch2 == 1)
        {
            continue;
        }
        break;
    }
    return com_num_list;
}


int main()
{
    int user_select, user_select2;
    int user_num;
    int com_num_list[7];
    int com_num_final[6];
    int len_com_num_list = sizeof(com_num_list)/sizeof(com_num_list[0]);
    

    int bonus_num;
    int count = 0;

    int input_num_count = 0;

    srand(time(NULL)); // 랜덤 숫자 뽑기위함

    printf("LOTTO!\n");

    while(1)
    {
        count++; // 회차 추가
        int user_num_list[6] = {0, 0, 0, 0, 0, 0}; // 사용자 숫자 입력전 배열 초기화
        int len_user_num_list = sizeof(user_num_list)/sizeof(user_num_list[0]);
        user_num_list[6] = user_num_input(input_num_count, user_num, user_num_list, len_user_num_list); //사용자 숫자 입력 함수
        
        printf("[사용자 숫자]\n");
        qsort(user_num_list, sizeof(user_num_list)/sizeof(user_num_list[0]), sizeof(int), compare); // 사용자 숫자 오름차순 정렬
        for (int i  = 0 ; i < sizeof(user_num_list)/sizeof(user_num_list[0]) ; i++)
        {
            printf("%d ", user_num_list[i]);
        }
        printf("\n");


        printf("수동으로 하실건가요? [ 1. 수동 | 2. 자동 ] : ");
        scanf("%d", &user_select);

        if (user_select == 1) // 수동을 선택한 경우
        {
            printf("[수동]을 선택하셨습니다.\n");
            
            com_num_list[7] = com_random_num(com_num_list, len_com_num_list); // 컴퓨터 랜덤 숫자 7개 추첨
           
            bonus_num = com_num_list[6]; // 7개 숫자 중 마지막 숫자는 보너스 숫자로 사용
            for (int i = 0 ; i < sizeof(com_num_final)/sizeof(com_num_final[0]) ; i++)
            {
                com_num_final[i] = com_num_list[i];
            }
            qsort(com_num_final, sizeof(com_num_final)/sizeof(com_num_final[0]), sizeof(int), compare); // 컴퓨터 숫자 오름차순 정렬

            printf("[컴퓨터 숫자]\n");
            qsort(com_num_final, sizeof(com_num_final)/sizeof(com_num_final[0]), sizeof(int), compare);
            for (int i  = 0 ; i < sizeof(com_num_final)/sizeof(com_num_final[0]) ; i++)
            {
                printf("%d ", com_num_final[i]);
            }
            printf("\n");
            printf("보너스 숫자 : %d\n", bonus_num);

            int same_count[2] = {0, 0};

            // 사용자 숫자와 컴퓨터 숫자 비교하는 코드
            for (int i = 0 ; i < len_user_num_list ; i ++)
            {
                for (int j = 0 ; j < len_user_num_list ; j++)
                {
                    if (user_num_list[i] == com_num_final[j])
                    {
                        same_count[0]++;
                    }
                    else if (user_num_list[i] == bonus_num)
                    {
                        same_count[1] = 1;
                    }
                }
            }
 
            printf("같은 갯수 : %d\n", same_count[0]);
            printf("보너스 맞췄나? : %d\n", same_count[1]);


            if (same_count[0] == 6)
            {
                input_num_count = 0;
                printf("%d회차 : [1등]\n", count);
                printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
                scanf("%d", &user_select2);
                if (user_select2 == 1)
                {
                    continue;
                }
                else if (user_select2 == 2)
                {
                    printf("[게임 종료]\n");
                    break;
                }
            }
            else if (same_count[0] == 5 && same_count == 1)
            {
                input_num_count = 0;
                printf("%d회차 : [2등]\n", count);
                printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
                scanf("%d", &user_select2);
                if (user_select2 == 1)
                {
                    continue;
                }
                else if (user_select2 == 2)
                {
                    printf("[게임 종료]\n");
                    break;
                }
            }
            else if (same_count[0] == 5)
            {
                input_num_count = 0;
                printf("%d회차 : [3등]\n", count);
                printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
                scanf("%d", &user_select2);
                if (user_select2 == 1)
                {
                    continue;
                }
                else if (user_select2 == 2)
                {
                    printf("[게임 종료]\n");
                    break;
                }
            }
            else if (same_count[0] == 4)
            {
                input_num_count = 0;
                printf("%d회차 : [4등]\n", count);
                printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
                scanf("%d", &user_select2);
                if (user_select2 == 1)
                {
                    continue;
                }
                else if (user_select2 == 2)
                {
                    printf("[게임 종료]\n");
                    break;
                }
            }
            else if (same_count[0] == 3)
            {
                input_num_count = 0;
                printf("%d회차 : [5등]\n", count);
                printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
                scanf("%d", &user_select2);
                if (user_select2 == 1)
                {
                    continue;
                }
                else if (user_select2 == 2)
                {
                    printf("[게임 종료]\n");
                    break;
                }
            }
            else
            {
                input_num_count = 0;
                printf("%d회차 : [낙첨]\n", count);
                printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
                scanf("%d", &user_select2);
                if (user_select2 == 1)
                {
                    continue;
                }
                else if (user_select2 == 2)
                {
                    printf("[게임 종료]\n");
                    break;
                }
            }
        }
        else if (user_select == 2)
        {
            printf("[자동]을 선택하셨습니다.\n");
            while (1)
            {
                int same_count[2] = {0, 0};
                count++;
                com_num_list[7] = com_random_num(com_num_list, len_com_num_list); // 컴퓨터 랜덤 숫자 7개 추첨

                bonus_num = com_num_list[6];

                for (int i = 0 ; i < sizeof(com_num_final)/sizeof(com_num_final[0]) ; i++)
                {
                    com_num_final[i] = com_num_list[i];
                }
         
                qsort(com_num_final, sizeof(com_num_final)/sizeof(com_num_final[0]), sizeof(int), compare);
                printf("[컴퓨터 자동 숫자]\n");
                for (int i = 0 ; i < sizeof(com_num_final)/sizeof(com_num_final[0]) ; i++)
                {
                    printf("%d ", com_num_final[i]);
                }
                printf("\n");
                printf("보너스 번호 : %d\n", bonus_num);
            
                // 사용자 숫자와 컴퓨터 숫자 비교하는 코드
                for (int i = 0 ; i < sizeof(com_num_final)/sizeof(com_num_final[0]) ; i ++)
                {
                    for (int j = 0 ; j < sizeof(com_num_final)/sizeof(com_num_final[0]) ; j++)
                    {
                        if (user_num_list[i] == com_num_final[j])
                        {
                            same_count[0]++;
                        }
                        else if (user_num_list[i] == bonus_num)
                        {
                            same_count[1] = 1;
                        }
                    }
                }

                printf("같은 숫자 갯수 : %d\n", same_count[0]);
                printf("보너스 숫자 유무 : %d\n", same_count[1]);
                
                if (same_count[0] == 6)
                {
 
                    printf("%d회차 : [1등]\n", count);
                    printf("=============================\n");
                    
                }
                else if (same_count[0] == 5 && same_count[1] == 1)
                {
                    printf("%d회차 : [2등]\n", count);
                    printf("=============================\n");
                }
                else if (same_count[0] == 5)
                {
                    printf("%d회차 : [3등]\n", count);
                    printf("=============================\n");
                }
                else if (same_count[0] == 4)
                {
                    printf("%d회차 : [4등]\n", count);
                    printf("=============================\n");
                }
                else if (same_count[0] == 3)
                {
                    printf("%d회차 : [5등]\n", count);
                    printf("=============================\n");
                    break;
                }
                else
                {
                    printf("%d회차 : [낙첨]\n", count);
                    printf("=============================\n");
                }   
            }
            break;            
        }
        else
        {
            printf("다시 입력하세요!\n");
        }
    }
    return 0;

}
 

 

 

 


교수님께서 말씀해주신대로 srand()를 처음 한번만 선언해주니까 세상 느렸던 프로그램이 세상 빨라져버림,,,,,헐랭방구.... 난수를 계속 생성해서 그런건가,,, 뭘까,,,, 설마 이게 문제였을거라고는 상상도 못해버렸어요!!!!!!!!!!!

 

그리고 코드가 반복되는 부분이 존재함(7개 숫자 랜덤 뽑기) 이 부분은 하나로 줄일 수 있을 것 같기도 함. 이것도 나중에 수정해봐야겠음!!!!

 

★구현하고 싶었는데, 못한 부분
문자를 입력했을 때 경고 문구를 출력하고 재입력하게 하고싶었음.ctype.h에 있는 isalpha() 함수를 사용해서 하려고함.이 함수는 대문자는 1, 소문자는 2, 그 이외의 값은 0을 반환한다고 함. getchar()를 이용해서 사용해보려고 했지만,,, 실패했어요 ㅠㅠ 그게 아래에 있는 함수 부분이에요! scanf를 하기전에 getchar() 쓰니까 첫 실행에서 한번이 씹히게 되니까 마음처럼 잘 되지 않았어요.... 조건문을 사용해서 수정해봐야할 것 같습니다!!!

 

int user_num_input (int input_num_count, int user_num, int user_num_list[6], int len_user_num_list) // 사용자 숫자 입력 함수
{
    while(input_num_count < 6) // 사용자 6개 숫자 입력
    {
        int switch1 = 0;
        printf("6개의 숫자를 입력해주세요. : ");
        // getchar(); // 문자 입력 처리 ==> 아직 완벽하지 않음.
        scanf("%d", &user_num);

        // if (isalpha(user_num) != 0) // 문자 입력 처리 ==> 아직 완벽하지 않음.
        // {
        //     printf("다시입력하세요!\n");
        //     continue;
        // }

        if (user_num < 1 || user_num > 45) // 범위 외 숫자 입력 처리
        {
            printf("다시입력하세요!\n");
            continue;
        }

        for (int j = 0 ; j < len_user_num_list ; j++) // 중복숫자 입력 처리
        {
            if (user_num == user_num_list[j])
            {
                switch1 = 1;
                break;
            }
        }
        if (switch1 == 1)
        {
            printf("중복된 숫자 입니다. 다시 입력하세요.\n");
            continue;
        }
        user_num_list[input_num_count] = user_num; // 정상 입력 숫자는 배열에 추가
        input_num_count++;
    }
    return user_num_list;
}
 

 

 

'C > 개인프로젝트01 - 로또' 카테고리의 다른 글

[2025.03.15 - 2025.03.16] (주말과제) C언어 로또 프로그램 만들기_2  (0) 2025.03.17
[2025.03.15 - 2025.03.16] (주말과제) C언어 로또 프로그램 만들기_1  (0) 2025.03.17
'C/개인프로젝트01 - 로또' 카테고리의 다른 글
  • [2025.03.15 - 2025.03.16] (주말과제) C언어 로또 프로그램 만들기_2
  • [2025.03.15 - 2025.03.16] (주말과제) C언어 로또 프로그램 만들기_1
polibo
polibo
Polibo의 개발 성장기 지켜봐주십슈 (콩 싫어해요.)
  • polibo
    Polibo와 개발 콩나무 키우기
    polibo
  • 전체
    오늘
    어제
    • 분류 전체보기 (64)
      • Python (23)
      • C (32)
        • 본수업 (19)
        • 예습 (7)
        • 개인프로젝트01 - 로또 (3)
        • 개인프로젝트02 - 복켓몬 키우기 (2)
        • 개인프로젝트03 - 김복천국 POS기 (1)
        • 팀프로젝트01 - 용사 복이의 대모험 RPG (0)
        • 팀프로젝트02 - 메일 프로그램 (0)
      • TCP_IP (0)
      • DB (1)
      • C++ (7)
      • QT (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬예제
    C
    c언어
    while문
    문자열
    c우선순위
    파이썬
    조건문
    반복문
    파이썬게임
    if문
    순서도
    파이썬 숫자야구
    파이썬반복문
    Python
    for문
    else if
    파이썬조건문
    c언어 scanf
    코딩
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
polibo
[2025.03.15 - 2025.03.16] (주말과제) C언어 로또 프로그램 만들기_개발완료보고서

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.