[C] 로또 번호 생성 프로그램

2022. 12. 8. 19:12C언어/문제풀이

728x90

◎ 포인터를 사용해서 숫자를 입력 받는 함수와 출력하는 함수를 만들어보자!


알고 있어야 하는 내용

  1. 포인터
  2. 반복문
  3. if문
  4. 함수 선언 방법

코드 및 설명

1
2
3
4
5
6
7
8
9
10
int main(void)
{
    int lotto_nums[6];
    printf("로또 번호 생성 프로그램입니다.\n1~45 중 6개 숫자를 입력하세요.\n");
    input_nums(lotto_nums);
    print_nums(lotto_nums);
 
    return 0;
}
 
cs

main함수에서 위 코드처럼 깔끔하게 작성하고싶다.

input_nums(lotto_nums)함수부터 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void input_nums(int *lotto_nums)
{
    int num;
    int i, j;
    int dup;
 
    for (i = 0; i < 6; i++)
    {
        printf("번호입력 : ");
        scanf("%d"&num);
        dup = 0;    // 0은 거짓(중복 되지 않았다는 의미)
        for (j = 0; j < i; j++)        // 앞에 선언 했던 값들 중에 중복 되는지 확인 하는 for문
        {
            if (num == lotto_nums[j])
            {
                dup = 1;
                break;    // 현재 반복문을 탈출
            }
        }
        if (!dup)        // dup이 0이라면 현재 i 위치에 num 값을 저장
        {
            lotto_nums[i] = num;
        }
        else 
        {
            printf("같은 번호를 입력했습니다.\n");
            i--;
        }
    }
}
cs

1행 요소를 포인터로 받는 다는 것은 주소를 받는다는 의미다.

7행 로또의 숫자를 입력 받기 위해서 6번 실행하는 반복문을 작성한다.

10행 일부러 중복 확인 후에 lotto_nums(넣어줘야 하는  값)으로 넣으려고 num을 선언

5, 11행 dup은 중복 여부를 확인하기 위한 변수인데 0을 넣어줌으로써 거짓(중복되지 않음)이라는 걸 의미한다.

12행 지금까지 앞에서 선언한 변수랑 현재 선언한 변수를 비교(중복 여부 파악)

16행 만약 중복 된 숫자라면 dup을 1로 바꿔주면서 참이라고 알려준다. 그리고 중복 확인 하는 반복문(12행)을 탈출한다.

20행 위에 for문에서 나온 dup 값을 보고 중복된 숫자가 아니라는걸 판단하면 걸러진 num값을 요소의 값으로 넣어주면 된다. 아니라면 i의 값을 뺴주고 다시 선언 할 수 있게 해준다.

 

마지막 print_nums(lotto_nums)를 보자.

1
2
3
4
5
6
7
8
9
void print_nums(int* lotto_num)
{
    int i;
    printf("로또번호 : ");
    for (i = 0; i < 6; i++)
    {
        printf("%5d", lotto_num[i]);
    }
}
cs

이 함수는 간단하다. 이때까지 입력한 값들을 한 번에 출력하는 함수이다.

이때 printf함수에서 lotto_num[i]는 주소 안에 들어 있는 값을 의미한다. 그 말은 *(lotto_num + i)이라고 작성 해도 무방하다.


결과

 

728x90