728x90
반응형
맨 위로 올라가기
구조체(Structure)

 

C언어에서 구조체는 서로 관련된 여러 데이터를 하나의 논리적인 단위로 묶어

표현할 수 있는 사용자 정의 데이터 타입입니다.

 

구조체는 다양한 데이터 타입의 멤버들로 이루어 지며,

각 멤버는 구조체 내에서 고유한 이름을 가집니다. 멤버에 접근하기 위해서는 구조체 변수의 이름 뒤에 점(.) 연산자를
사용하여 멤버 이름을 지정해야 합니다.

 

예를 들어 다음과 같이 구조체를 정의할 수 있습니다.

struct Person 
{
    char name[20];
    int age;
    float height;
};

 

위 구조체는 이름(name), 나이(age), 키(height)를 멤버로 갖는 구조체를 정의한 것입니다.

 

구조체를 사용하여 변수를 선언할 때는 다음과 같이 작성합니다.

struct Person person1;

 

또는 typedef를 사용하여 구조체 이름을 별칭으로 정의하여 다음과 같이 작성할 수도 있습니다.

typedef struct 
{
    char name[20];
    int age;
    float height;
} Person;

Person person1;

 

구조체는 데이터를 논리적으로 묶어 관리하기에 유용하며,

다양한 자료구조나 객체 지향 프로그래밍에서도 많이 활용됩니다.

 


구조체를 이용한 간단한 주소록 관리 프로그램

 

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_CONTACTS 100

typedef struct
{
	char name[20];
	char phone[20];
	char email[30];
} Contact;


int main()
{
	Contact contacts[MAX_CONTACTS];

	int num_contacts = 0;
	int choice;

	while (1)
	{
		printf("주소록 관리 프로그램\n");
		printf("1. 연락처 추가\n");
		printf("2. 연락처 검색\n");
		printf("3. 연락처 목록 출력\n");
		printf("4. 프로그램 종료\n");
		printf("선택: ");
		scanf("%d", &choice);

		switch (choice)
		{
		case 1:
			if (num_contacts >= MAX_CONTACTS)
			{
				printf("더 이상 연락처를 추가할 수 없습니다.\n");
			}
			else
			{
				printf("이름: ");
				scanf("%s", contacts[num_contacts].name);
				printf("전화번호: ");
				scanf("%s", contacts[num_contacts].phone);
				printf("이메일: ");
				scanf("%s", contacts[num_contacts].email);
				num_contacts++;
			}
			break;

		case 2:
			if (num_contacts == 0)
			{
				printf("저장된 연락처가 없습니다.\n");
			}
			else
			{
				char search_name[20];
				printf("검색할 이름: ");
				scanf("%s", search_name);
				int found = 0;

				for (int i = 0; i < num_contacts; i++)
				{
					if (strcmp(search_name, contacts[i].name) == 0)
					{
						printf("이름: %s\n", contacts[i].name);
						printf("전화번호: %s\n", contacts[i].phone);
						printf("이메일: %s\n", contacts[i].email);
						found = 1;
						break;
					}
				}
				if (!found)
				{
					printf("검색된 연락처가 없습니다.\n");
				}
			}
			break;

		case 3:
			if (num_contacts == 0)
			{
				printf("저장된 연락처가 없습니다.\n");
			}
			else
			{
				for (int i = 0; i < num_contacts; i++)
				{
					printf("이름: %s\n", contacts[i].name);
					printf("전화번호: %s\n", contacts[i].phone);
					printf("이메일: %s\n", contacts[i].email);
					printf("\n");
				}
			}
			break;

		case 4:
			printf("프로그램을 종료합니다.\n");
			exit(0);

		default:
			printf("잘못된 입력입니다.\n");
			break;

		}
	}

	return 0;
}
728x90
반응형

'Language > C & C++' 카테고리의 다른 글

A simple question about the preprocessor directive 'include'  (0) 2024.03.05
GNU Compiler Collection  (0) 2024.01.02
증감 연산자의 응용  (0) 2023.04.15
특수연산자 (괄호, 쉼표)  (0) 2023.04.15
Function pointer  (0) 2022.11.19

+ Recent posts