for (int i = 0; i < 5; i++)
p[i] = malloc(sizeof(struct Person*));
int oldstage = 0;
int oldstindex = 0;
scanf("%s %d %s %d %s %d %s %d %s %d", &p[0]->name, &p[0]->age, &p[1]->name, &p[1]->age, &p[2]->name, &p[2]->age, &p[3]->name, &p[3]->age, &p[4]->name, &p[4]->age);
for (int i = 0; i < 5; i++)
{
if (p[i]->age > oldstage)
{
oldstage = p[i]->age;
oldstindex = i;
}
}
printf("%s", p[oldstindex]->name);
위와 같이 제출했습니다. 위 코드를 포함하여 직접 비주얼 스튜디오에서 돌려봤을 때는 잘 작동했는데, 심사문제는 통과가 안 되네요. 무슨 문제인지 모르겠습니다.
동작은 하지만 나이가 가장 많은 사람을 출력하지 않고, 마지막에 입력된 사람을 출력하고 있습니다.
입력
박제가 30 서유구 16 박지원 43 홍대용 49 정약용 18
출력
정약용
여기서 정약용은 18세이므로 가장 나이 많은 사람이 아닙니다.
오답을 출력하고 있으므로 통과하지 못합니다.
박제가 30 서유구 16 박지원 43 홍대용 49 정약용 18
위와 같이 입력했을 때 답이 '홍대용'으로 나옵니다.
심사문제에 제시된 다른 두 예시에서도 올바른 출력이 나옵니다.
전체 코드는 아래와 같았습니다.
#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 < 5; i++)
p[i] = malloc(sizeof(struct Person*));
int oldstage = 0;
int oldstindex = 0;
scanf("%s %d %s %d %s %d %s %d %s %d", &p[0]->name, &p[0]->age, &p[1]->name, &p[1]->age, &p[2]->name, &p[2]->age, &p[3]->name, &p[3]->age, &p[4]->name, &p[4]->age);
for (int i = 0; i < 5; i++)
{
if (p[i]->age > oldstage)
{
oldstage = p[i]->age;
oldstindex = i;
}
}
printf("%s", p[oldstindex]->name);
for (int i = 0; i < sizeof(p) / sizeof(struct Person*); i++)
{
free(p[i]);
}
return 0;
}
https://glot.io/snippets/glvzvkgeqa
위 온라인 컴파일러에서 실행해보세요.
실행 결과는 정약용입니다.
Visual Studio에서는 결과가 홍대용으로 나오지만, 예외가 발생합니다.
UNIT 53.2의 코드와 비교해서 고쳐야 합니다. 잘못된 코드를 작성했기 때문입니다.
강조한 부분이 보일 겁니다. 본인이 작성한 코드와 비교해보세요.