티스토리 뷰
친구 목록을 관리하는 프로그램을 만듭니다.
5명 친구의 성별, 나이, 이름, 전화번호를 입력하고 가장 나이가 많은 친구의 목록을 출력합니다.
단, 다음과 같이 2개의 헤더 파일과 2개의 소스 파일로 분할 컴파일합니다.
- friend.h 헤더 파일 : 친구의 각 항목을 멤버로 갖는 Friend 구조체 선언합니다.
- func.h 헤더 파일 : func.c에 구현된 함수를 선언합니다.
- func.c 소스 파일 : inputData, oldestFriend, printData 함수 구현
- main.c 소스 파일
main.c 소스 파일은 아래와 같이 작성합니다.
#include <stdio.h>
#include "friend.h"
#include "func.h"
int main(void)
{
Friend myFriend[BEST_CNT];
Friend oldest;
inputData(myFriend);
oldest = getOldestFriend(muFriend);
printData(oldest);
return 0;
}
실행결과는 다음과 같습니다.
/*
실행결과
성별 입력(m / f) : m
나이 입력 : 17
이름 입력 : 홍길동
전화번호 입력 : 1111-1111
성별 입력(m / f) : m
나이 입력 : 44
이름 입력 : 이순신
전화번호 입력 : 2222-2222
성별 입력(m / f) : f
나이 입력 : 19
이름 입력 : 유관순
전화번호 입력 : 3333-3333
성별 입력(m / f) : m
나이 입력 : 33
이름 입력 : 또서방
전화번호 입력 : 4444-4444
성별 입력(m / f) : f
나이 입력 : 21
이름 입력 : 꽁색시
전화번호 입력 : 5555-5555
나이가 가장 많은 친구 :
성별 : 남, 나이 : 44세, 이름 : 이순신, 전화번호 : 2222-2222
*/
다음은 제가 작성한 코드입니다.
먼저 friend.h 헤더 파일입니다.
#ifndef FRIEND_H
#define FRIEND_H
typedef struct
{
int age;
char sex;
char number[12];
char name[20];
} Friend;
#endif
구조체의 중복 선언을 막기 위해 조건부 전처리 지시자를 사용했습니다.
다음은 func.h 헤더 파일입니다.
#include "friend.h"
#ifndef FUNC_H
#define FUNC_H
#define BEST_CNT 5
void inputData(Friend *);
Friend getOldestFriend(Friend*);
void printData(Friend);
#endif
함수는 중복 선언하여도 상관없지만 그냥 모든 헤더파일은 중복방지처리를 해주었습니다.
다음은 func.c 소스 파일입니다.
#include <stdio.h>
#include <string.h>
#include "func.h"
void inputData(Friend * pFriend)
{
for (int i = 0; i < BEST_CNT; i++)
{
printf("성별 입력(m / f) : ");
pFriend[i].sex = getchar();
printf("나이 입력 : ");
scanf("%d", &(pFriend[i].age));
getchar();
printf("이름 입력 : ");
fgets(pFriend[i].name, 19, stdin);
pFriend[i].name[strlen(pFriend[i].name) - 1] = '\0';
printf("전화번호 입력 : ");
fgets(pFriend[i].number, 11, stdin);
pFriend[i].number[strlen(pFriend[i].number) - 1] = '\0';
}
}
Friend getOldestFriend(Friend * pFriend)
{
int index = 0;
for (int i = 0; i < BEST_CNT; i++)
{
if (pFriend[index].age < pFriend[i].age)
{
index = i;
}
}
Friend oldestFriend = pFriend[index];
return oldestFriend;
}
void printData(Friend friend)
{
printf("나이가 가장 많은 친구 :\n");
printf("성별 : %s, 나이 : %d세, 이름 : %s, 전화번호 : %s\n", (friend.sex == 'm') ? "남" : "여", friend.age, friend.name, friend.number);
}
사용할 함수들을 모두 여기서 정의했습니다.
다음은 main.c 소스 파일입니다.
#include <stdio.h>
#include "friend.h"
#include "func.h"
int main(void)
{
Friend myFriend[BEST_CNT];
Friend oldest;
inputData(myFriend);
oldest = getOldestFriend(myFriend);
printData(oldest);
return 0;
}
제가 작성한 코드의 실행결과는 문제의 것과 같습니다.
'공부 일지 > C언어 공부 일지' 카테고리의 다른 글
전처리와 분할 컴파일 실전문제2 (0) | 2021.02.05 |
---|---|
전처리와 분할 컴파일 실전문제1 (0) | 2021.02.05 |
분할 컴파일 (0) | 2021.02.05 |
전처리와 분할 컴파일 (0) | 2021.02.04 |
파일 입출력 실전문제3 (0) | 2021.02.04 |