프로젝트 & 과제/3학년

[C언어] 구조체 출력

qqlzzb 2022. 2. 9. 18:31

개요

프로그래밍 언어 : C언어

과제 수행 날짜 : 2020.12.04

과제 개요 : 구조체에 다음 구조체를 가리키는 포인터를 추가하여 5개의 구조체를 연결한 후, 특정 데이터를 출력

 

코드

총 5개의 구조체 데이터를 생성한 후, sID가 20으로 시작하는 데이터만 출력한다.

#include <stdio.h>
// 구조체 정의
struct data {
	char name[10];
	char sID[10];
	int number;
	struct data *next;
};

int main()
{
	// 구조체 변수 5개를 임의의 값으로 초기화
	struct data d1 = { "김길동","20882020",1 };
	struct data d2 = { "홍길동","21992020",2 };
	struct data d3 = { "마이클","20012020",3 };
	struct data d4 = { "을지문덕","13202020",4 };
	struct data d5 = { "방탄소년","20342020",5 };

	//순서대로 포인터 연결
	d1.next = &d2;
	d2.next = &d3;
	d3.next = &d4;
	d4.next = &d5;
	d5.next = NULL;

	struct data *p = &d1; //구조체들을 방문하기 위한 포인터

	//검색과 출력
	while (p != NULL)
	{
		if (p->sID[0] == '2' && p->sID[1] == '0')
		{
			printf("%s / %s / %d\n", p->name, p->sID, p->number);
		}
		p = p->next;

	}
	return 0;
}

결과

먼저 구조체를 정의한 후, 구조체 안에 다음 구조체를 가리키도록 하는 포인터인 next를 추가한다. 그 후, 변수 5개를 생성하여 초기화한다.

 

이제 변수들의 다음으로 올 구조체들을 next 포인터로 가리키도록 한다. d1의 다음에는 d2가 와야 하므로 d1.next = &d2로 선언하여, d1 구조체의 next가 d2 구조체를 가리키도록 한다. 이와 같이 마지막 구조체까지 NULL을 가리키도록 연결한다.

 

그리고 구조체를 가리키는 포인터 p를 하나 더 선언하여 이 포인터가 첫 번째 구조체의 주소를 가리키도록 한다. 왜냐하면 현재 구조체들이 첫 번째부터 5번째까지 next로 연결되어 있기 때문에 이 포인터 p를 이용해서 처음부터 끝 구조체까지 next로 찾아가도록 하기 위함이다. while 문으로 p가 NULL이 될 때까지 반복하는데, p가 NULL이라는 것은 더 이상 다음 구조체가 없다는 뜻이므로 while 문을 빠져나온다. while 문 안에서는 현재 구조체의 sID가 20으로 시작하는지 판단하고 맞으면 이름, 학번, 고유번호를 출력하고 아니면 p = p->next를 통해 다음 구조체로 넘어간다.