[C언어] : 구조체와 typedef 예제

지환·2022년 1월 26일
0

C언어

목록 보기
29/37
post-thumbnail

typedef 예제를 풀어보자

1단계 > typedef로 정의한 자료형으로 변수 선언.

<코드>

#include <stdio.h>

typedef unsigned short int UK;

int main()
{
	unsigned short int data = 5;
	UK arr;
	arr = data;
	printf("temp = %d\n", arr);

}

<결과>

  • 이 처럼 typedef와 struct는 중요한 부분을 차지한다.

문제2) 구조체를 사용해서 사람의 신체 정보를 입력 받고 출력해라

<코드>

#include <stdio.h>

typedef struct People
{
	char name[10];
	unsigned short int age;
	float height;
	float weight; 

} Person_p;

int main()
{
	Person_p data;
	printf("상대방의 정보를 입력하시오. > \n");
	printf(" 이름 : ");
	scanf_s("%s", data.name, 10);
	printf(" 나이 : ");
	scanf_s("%hu", &data.age);
	printf(" 키 : ");
	scanf_s("%f", &data.height);
	printf(" 몸무게 : ");
	scanf_s("%f", &data.weight);
	printf(" \n 정보는 이와 같다. \n");
	printf("%s : %d세, %.1fcm\n, %.1fkg\n", data.name, data.age, data.height, data.weight);

}

<결과>

문제3 > 친구 정보 관리 프로그램

  1. 작업메뉴 : main 함수에서 처리한다.
  • 사용자가 프로그램에서 제공하는 기능을 선택할 수 있게 한다.
  1. 친구 추가하기 : AddF
  • scanf_s를 이용해서 1명씩 최대 5명까지 입력 받는다. 5명 이상 받으면 입력을 받을 수 없다고 처리 후 오류로 처리
  1. 친구 목록보기 : showF
  • 입력된 친구 목록을 보여준다.

<코드>

#include <stdio.h>
#define MAX_ARR 5

typedef char NAME_TYPE[15];

int AddF(NAME_TYPE* p_name, unsigned short int* p_age, float* p_height, float* p_weight, int count)
{
	if (count < MAX_ARR)
	{
		printf("\n 새로운 친구 정보를 입력하세요 \n");
		printf("1. 이름 :");
		scanf_s("%s", *(p_name + count), 15); // &로 받지 않기 때문에.
		printf("2. 나이 : ");
		scanf_s("%hu", p_age + count);
		printf("3. 키 :");
		scanf_s("%f", p_height + count);
		printf("4. 몸무게 : ");
		scanf_s("%f", p_weight + count);
		printf(" 입력을 완료했다. \n\n");
		return 1;

	}
	else {
		printf("최대 인원을 초과하여 입력 할 수 없다. \n");
		printf(" 최대 %d명까지만 관리 가능하다.\n\n", MAX_ARR);
	}
	return 0;
}


void showF(NAME_TYPE* p_name, unsigned short int* p_age, float* p_height, float* p_weight, int count)
{
	int i;
	if (count > 0)
	{
		printf("\n 등록된 친구 목록 \n");
		printf("==========================\n");
		for (int i = 0; i < count; i++)
		{
			printf("%-14s, %3d, %6.2f, %6.2f\n", *(p_name + i), *(p_age + i), *(p_height + i), *(p_weight + i));

		}
		printf(" ==========================\n\n");
	}else {
	
		printf(" \n 등록된 친구가 없습니다. \n\n");
	
	}

}
int main()
{
	NAME_TYPE name[MAX_ARR];
	unsigned short int age[MAX_ARR];
	float height[MAX_ARR];
	float weight[MAX_ARR];
	int count = 0, num;

	while (1) {

		printf("           [메뉴]          \n");
		printf("==============================\n");
		printf("1. 친구 추가 \n");
		printf("2. 친구 목록 보기\n");
		printf("3. 종료  \n");
		printf("=============================\n");
		printf(" 번호 선택 : ");
		scanf_s("%d", &num);
		if (num == 1) {
			if (1 == AddF(name, age, height, weight, count)) count++;}
		else if (num == 2) {
			showF(name, age, height, weight, count);
			}
		else if (num == 3) {
				break;
			}
		else {
				printf("1~3번만 선택가능하다.\n\n");
			}
		}


}

<결과>

=> 구조체를 활용하여 구현.

#include <stdio.h>
#define MAX_ARR 5

typedef struct People
{
	char name[14];
	unsigned short int age;
	float height;
	float weight;

}Person;

int AddF(Person *p_friend, int count)
{
	if (count < MAX_ARR)
	{
		p_friend = p_friend + count;
		printf("\n 새로운 친구 정보를 입력하세요 \n");
		printf("1. 이름 :");
		scanf_s("%s", p_friend->name, 14); // &로 받지 않기 때문에.
		printf("2. 나이 : ");
		scanf_s("%hu", &p_friend->age); 
		printf("3. 키 :");
		scanf_s("%f", &p_friend->height);
		printf("4. 몸무게 : ");
		scanf_s("%f", &p_friend->weight);
		printf(" 입력을 완료했다. \n\n");
		return 1;

	}
	else {
		printf("최대 인원을 초과하여 입력 할 수 없다. \n");
		printf(" 최대 %d명까지만 관리 가능하다.\n\n", MAX_ARR);
	}
	return 0;
}


void showF(Person *p_friend, int count)
{
	int i;
	if (count > 0)
	{
		printf("\n 등록된 친구 목록 \n");
		printf("==========================\n");
		for (int i = 0; i < count; i++)
		{
			printf("%-14s, %3d, %6.2f, %6.2f\n", p_friend->name, p_friend->age, p_friend->height, p_friend->weight);
			p_friend++;

		}
		printf(" ==========================\n\n");
	}else {
	
		printf(" \n 등록된 친구가 없습니다. \n\n");
	
	}

}
int main()
{
	Person friends[MAX_ARR];
	int count = 0, num;

	while (1) {

		printf("           [메뉴]          \n");
		printf("==============================\n");
		printf("1. 친구 추가 \n");
		printf("2. 친구 목록 보기\n");
		printf("3. 종료  \n");
		printf("=============================\n");
		printf(" 번호 선택 : ");
		scanf_s("%d", &num);
		if (num == 1) {
			if (1 == AddF(friends, count)) count++;
		}else if (num == 2) {
			showF(friends, count);
			}
		else if (num == 3) {
				break;
			}
		else {
				printf("1~3번만 선택가능하다.\n\n");
			}
		}


}


<결과>

profile
아는만큼보인다.

0개의 댓글