구조체
사용자정의 데이터 타입
기존데이터타입을 묶어서 새로운 타입을 생성
struct Score {
char name[10]; //멤버 변수
int kor, eng, mat, total;
float avg;
};
만들고 나면 선처리부에 항상 등록해줘야 인식된다.
구조체 변수선언
struct Score aa;
aa.kor = 10;
구조체 사용하기
#include<stdio.h>
struct score;
struct score
{
char name[10];
int kor, eng, mat, total;
float avg;
};
int main() {
struct score student;
//scanf("%s", &student.name[0]);
scanf("%s", student.name);
scanf("%d", &student.kor);
scanf("%d", &student.eng);
scanf("%d", &student.mat);
student.total = student.kor + student.eng + student.mat;
student.avg = student.total / 3.f;
printf("국어\t영어\t수학\t총점\t평균\n");
printf("%d\t%d\t%d\t%d\t%f", student.kor, student.eng, student.mat, student.total, student.avg);
}
scanf를 선언할때 반드시 주소를 가져와야 한다.
그때 전 과정에서 배웠던 포인터는 구조체가 아닌, 구조체 내 멤버변수 기준으로 설명이 된다.
단, 값으로 변형했을 경우 주소값으로 변형해주는 &의 경우 구조체 앞에 붙여야 한다.
간혹 실수 하지 않도록 주의하면서 작성하도록 하자.
구조체 사용하기, 두 번째
#include <stdio.h>
typedef struct score
{
char name[10];
int kor, eng, mat, total;
float avg;
}SCORE;
int main()
{
SCORE student;
SCORE* p;
p = &student;
//p->kor = 300;
//(*p).kor = 300;
printf("이름 입력 : ");
scanf("%s", p->name);
printf("국어 점수 입력 : ");
scanf("%d", &p->kor);
printf("영어 점수 입력 : ");
scanf("%d", &p->eng);
printf("수학 점수 입력 : ");
scanf("%d", &p->mat);
p->total = p->kor + p->eng + p->mat;
p->avg = (p->total) / 3.f;
/* 출력 하기 */
printf("이름\t국어\t영어\t수학\t총점\t평균\n");
printf("%s\t%d\t%d\t%d\t%d\t%f", (*p).name, (*p).kor, (*p).eng, (*p).mat, (*p).total, (*p).avg);
}
위에서 구조체 사용하기 위해서는
student.kor을 사용하였다.
그러나 포인터를 사용하면서 사용 방법에 대한 선택지도 늘어났다.
p->kor
(*p).kor 사용이 가능해진다.
*p.kor을 사용 할 경우에, 포인터가 먼저 실행이 되어서 kor을 인식이 되지 않는다.
반응형