C Language Basic

C Language [핵심정리] - 25

cCcode 2021. 6. 8. 01:47

1. 구조체 사용하기 - 2

구조체 변수선언할 때는 일일이 struct 키워드를 사용하려니 조금 귀찮았죠? 물론 구조체를 정의와 동시에 선언하는 방법을 통해 간단히 할 수 있었지만, 다른 방법 또한 존재합니다. 그건 바로 typedef 구조체정의하며 별칭지정하는 방법입니다. 

typedef로 구조체 정의

typedef구조체 별칭을 만들었다면 변수는 ○ 구조체 별칭 변수명; 형태로 선언합니다.

구조체 별칭 사용 - 1
구조체 별칭 사용 - 2
결과

typedef 를 사용하고 구조체정의할 때 본래 구조체 변수를 선언하던 중괄호세미콜론 사이에는 별칭이 들어가기 때문에 위 코드에선 구조체 별칭 Position이라 하겠다는 의미입니다. 구조체 별칭을 정했기 때문에 이제 저희는 struct 키워드생략하고 바로 변수를 선언할 수 있는겁니다. 물론 typedef 를 사용해 구조체변수재정의 해주었다고는 하지만 값의 접근법 자체가 달라진건 아닙니다. 따라서 . 구조체 별칭 을 사용해서 에 접근합니다.

ex) struct location p1 과 Position p1은 동일합니다.

 

+ typedef구조체 뿐만 아니라 모든 자료형의 별칭을 만들 수 있습니다.

구조체 외 자료형의 typedef 사용
결과

 

저희는 여기서 한가지 의문이 들수도 있습니다. 어차피 구조체별칭을 이용해서 사용할 수 있는데 굳이 구조체명을 지정해줘야하는걸까? 하는 의문 말이죠. 여러분의 의문대로 익명 구조체(anonymous structure)를 사용하면 구조체명을 지정하지 않아도 됩니다. 즉, typedef 를 사용하면 구조체명을 생략할 수 있다는 말이겠죠? 주의해주세요. 일반적인 구조체 선언이 아닌 typedef 를 사용할 때 입니다.

구조체명 생략

이 때는 구조체명생략했기 때문에 구조체명을 이용한 구조체 변수 선언은 불가능하고 항상 ○ 구조체 별칭 변수명; 형태로 구조체 변수를 선언해야 합니다.

구조체명 생략
결과

- 만든 프로그램(미완성)

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

typedef struct {
	char name[30];
	int average_score;
	char rank;
}Data_Base;

void PRINT_TITLE();

int main()
{
	Data_Base d1;
	int input_one;
	int input_two;
	
	strcpy_s(d1.name, 7, "cCcode");
	d1.average_score = 50;
	d1.rank = 'B';

	PRINT_TITLE();
	printf("	Helper : If you want continue, press ENTER.\n");
	Sleep(3000);

	printf("	");
	input_one = getchar();
	
	if (input_one == '\n')
	{
		system("cls");
		PRINT_TITLE();
	}
	else
	{
		move:
		printf("	Helper : Wrong input\n");
		printf("	Helper : Force ture off Program.\n");
		Sleep(1500);

		for (int i = 0; i < 3; i++)
		{
			system("cls");
			if (i == 0)
				printf("	Turn off the Program.");
			else if (i == 1)
				printf("	Turn off the Program. .");
			else
				printf("	Turn off the Program. . .");
			Sleep(2000);
		}
		Sleep(1500);
		system("cls");
		Sleep(1500);
		printf("	T H A N K   Y O U");
		Sleep(1500);
		system("cls");

		return 0;
	}

	printf("		1) Modifying\n\n");

	printf("	INPUT : ");
	scanf_s("%d", &input_two);
	
	if (input_two == 1)
	{
		Sleep(2000);
		system("cls");

		PRINT_TITLE();
		printf("- Name : %s\n", d1.name);
		printf("- score_average : %d\n", d1.average_score);
		printf("- rank : %c\n", d1.rank);
	}
	else goto move;
	
	return 0;
}

void PRINT_TITLE()
{
	printf("+~~~~~~~~~~~~~~~~~~ Data Base Program ~~~~~~~~~~~~~~~~~~+\n\n");
}

이대로 끝내기에는 아쉬워 프로그램을 만들어봤습니다. 비록 미완성이지만 따로 완성한 후 업로드 하겠습니다.