C Language [핵심정리] - 25
1. 구조체 사용하기 - 2
구조체 변수를 선언할 때는 일일이 struct 키워드를 사용하려니 조금 귀찮았죠? 물론 구조체를 정의와 동시에 선언하는 방법을 통해 간단히 할 수 있었지만, 다른 방법 또한 존재합니다. 그건 바로 typedef로 구조체를 정의하며 별칭을 지정하는 방법입니다.
typedef로 구조체 별칭을 만들었다면 변수는 ○ 구조체 별칭 변수명; 형태로 선언합니다.
typedef 를 사용하고 구조체를 정의할 때 본래 구조체 변수를 선언하던 중괄호와 세미콜론 사이에는 별칭이 들어가기 때문에 위 코드에선 구조체 별칭을 Position이라 하겠다는 의미입니다. 구조체 별칭을 정했기 때문에 이제 저희는 struct 키워드를 생략하고 바로 변수를 선언할 수 있는겁니다. 물론 typedef 를 사용해 구조체변수를 재정의 해주었다고는 하지만 값의 접근법 자체가 달라진건 아닙니다. 따라서 . 구조체 별칭 을 사용해서 값에 접근합니다.
ex) struct location p1 과 Position p1은 동일합니다.
+ 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");
}
이대로 끝내기에는 아쉬워 프로그램을 만들어봤습니다. 비록 미완성이지만 따로 완성한 후 업로드 하겠습니다.