ABOUT ME

이백사십 아니고 이사영 개발 초보의 성장 일기

Today
Yesterday
Total
  • C언어 코딩도장 53.7 : 나이가 가장 많은 사람 찾기
    개인 공부/C언어 공부 2020. 8. 26. 03:45

    문제 : 표준 입력으로 5명의 인적 정보가 입력됩니다(홀수 번째는 이름, 짝수 번째는 나이). 다음 소스 코드를 완성하여 입력된 사람 중에서 나이가 가장 많은 사람의 이름이 출력되게 만드세요.

     

    한 시간 정도 끙끙거렸던 문제...ㅠ_ㅠ

     

    1차 시도

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    for (int i = 0; i < sizeof(p) / sizeof(struct Person*); i++)
        {
            p[i] = malloc(sizeof(struct Person));
        }
     
        for (int i = 0; i < 5; i++)
        {
            scanf("%s %d", p[i]->name, &p[i]->age);
        }
     
        int max = 0;
     
        for (int i = 0; i < sizeof(p) / sizeof(struct Person*- 1; i++)
        {
            if (p[i + 1]->age > p[i]->age)
            {
                max = i + 1;
            }
            else
                max = i;
        }
     
        printf("%s\n", p[max]->name);
    cs

     

    사실 비주얼 스튜디오에서 에러 떠서 고친 건데도 오답이라고 떴다.

    (scanf에서 p[i]->age 앞에 &을 붙여야 하는데 안 붙였다. 이놈의 덜렁거림...)

     

    그래서 질문 게시판을 뒤적이고 뒤적여서

    C6011 오류가 뜨면 오답이라고 간주하는 것임을 알아냈다.

     

    이놈의 역참조 오류!!!!!!!!!! 나한테 왜 그러는데!!!!!!!!!!!!!!!

     

    답변으로 컴파일 옵션... 어쩌구 하셨는데(https://dojang.io/mod/forum/discuss.php?d=1239) 무슨 소린지 이해가 안 돼서 그냥 내 방식대로 포인터가 NULL임을 먼저 검사하는 방식으로 코드를 수정했다. 

     

    그렇게 2차 시도

    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
        for (int i = 0; i < sizeof(p) / sizeof(struct Person*); i++)
        {
            p[i] = malloc(sizeof(struct Person));
        }
     
        for (int i = 0; i < 5; i++)
        {
            if (p[i] != NULL)
                scanf("%s %d", p[i]->name, &p[i]->age);
        }
     
        int max = 0;
     
        for (int i = 0; i < sizeof(p) / sizeof(struct Person*- 1; i++)
        {
            if (p[i + 1!= NULL && p[i] != NULL)
            {
                if (p[i + 1]->age > p[i]->age)
                {
                    max = i + 1;
                }
                else
                    max = i;
            }
        }
     
        printf("%s\n", p[max]->name);
    cs

     

    분명 잘 고친 것 같았는데 또 오답... -_-

    빡쳐서 포기할까 하다가 꾹 참고 열심히 디버깅 해봤는데 원인은 또 나에게 있었다

    그냥 최대값 찾는 거에서 실수함 ㅎ 진짜... 바보인가 나는.. 쪽팔리지만 어쨌든 이것도 공부니까 그냥 실수한 것도 다 올린다.

     

    아무튼 그렇게 고쳐서 최종 답안 및 전체 코드!

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
     
    struct Person {
        char name[30];
        int age;
    };
     
    int main()
    {
        struct Person* p[5];
     
        for (int i = 0; i < sizeof(p) / sizeof(struct Person*); i++)
        {
            p[i] = malloc(sizeof(struct Person));
        }
     
        for (int i = 0; i < 5; i++)
        {
            if (p[i] != NULL)
                scanf("%s %d", p[i]->name, &p[i]->age);
        }
     
        int max = 0;
     
        for (int i = 1; i < sizeof(p) / sizeof(struct Person*); i++)
        {
            if (p[max] != NULL && p[i] != NULL)
            {
                if (p[max]->age < p[i]->age)
                {
                    max = i;
                }
            }
        }
     
        printf("%s\n", p[max]->name);
     
        for (int i = 0; i < sizeof(p) / sizeof(struct Person*); i++)
        {
            free(p[i]);
        }
     
        return 0;
    }
    cs

     

     

     

    + 여담이지만... 학교 수업에서 쓰던 비주얼 스튜디오 옛날 버전은 삭제하고 최신 버전으로 다시 설치했는데 오히려 더 에러가 많이 발생하는 것 같은 건 기분 탓일까... -_-... LNK1168 에러도 해결해보고...(해결 방법 참고 : https://m.blog.naver.com/PostView.nhn?blogId=jhnyang&logNo=221508882582&proxyReferer=https:%2F%2Fwww.google.co.kr%2F) 이 코드 짜는 데도 수많은 오류가 나오고... 나 정말 잘하고 있는 건가... ㄱ-;;

     

     

     

     

    댓글

Designed by Tistory.