[개발 완료 보고서]

[순서도]

[코드]
// 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 |