-
C언어 코딩도장 53.7 : 나이가 가장 많은 사람 찾기개인 공부/C언어 공부 2020. 8. 26. 03:45
문제 : 표준 입력으로 5명의 인적 정보가 입력됩니다(홀수 번째는 이름, 짝수 번째는 나이). 다음 소스 코드를 완성하여 입력된 사람 중에서 나이가 가장 많은 사람의 이름이 출력되게 만드세요.
한 시간 정도 끙끙거렸던 문제...ㅠ_ㅠ
1차 시도
1234567891011121314151617181920212223for (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;}elsemax = i;}printf("%s\n", p[max]->name);cs 사실 비주얼 스튜디오에서 에러 떠서 고친 건데도 오답이라고 떴다.
(scanf에서 p[i]->age 앞에 &을 붙여야 하는데 안 붙였다. 이놈의 덜렁거림...)
그래서 질문 게시판을 뒤적이고 뒤적여서
C6011 오류가 뜨면 오답이라고 간주하는 것임을 알아냈다.
이놈의 역참조 오류!!!!!!!!!! 나한테 왜 그러는데!!!!!!!!!!!!!!!
답변으로 컴파일 옵션... 어쩌구 하셨는데(https://dojang.io/mod/forum/discuss.php?d=1239) 무슨 소린지 이해가 안 돼서 그냥 내 방식대로 포인터가 NULL임을 먼저 검사하는 방식으로 코드를 수정했다.
그렇게 2차 시도
123456789101112131415161718192021222324252627for (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;}elsemax = i;}}printf("%s\n", p[max]->name);cs 분명 잘 고친 것 같았는데 또 오답... -_-
빡쳐서 포기할까 하다가 꾹 참고 열심히 디버깅 해봤는데 원인은 또 나에게 있었다
그냥 최대값 찾는 거에서 실수함 ㅎ 진짜... 바보인가 나는.. 쪽팔리지만 어쨌든 이것도 공부니까 그냥 실수한 것도 다 올린다.
아무튼 그렇게 고쳐서 최종 답안 및 전체 코드!
12345678910111213141516171819202122232425262728293031323334353637383940414243444546#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) 이 코드 짜는 데도 수많은 오류가 나오고... 나 정말 잘하고 있는 건가... ㄱ-;;
'개인 공부 > C언어 공부' 카테고리의 다른 글
C언어 코딩도장 55.8 심사문제: 게임 캐릭터 구조체 사용하기 (0) 2020.08.28 C언어 코딩도장 54.7 심사문제: 정수 데이터 공용체 정의하기 (0) 2020.08.27 C언어 코딩도장 53.6 : 선의 길이 구하기 (0) 2020.08.26 C언어 코딩도장 52.7 : 인적 정보 복제하기 (0) 2020.08.26 C언어 코딩도장 52.6 : 인적 정보 삭제하기 (0) 2020.08.26