개요
프로그래밍 언어 : 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를 통해 다음 구조체로 넘어간다.
'프로젝트 & 과제 > 3학년' 카테고리의 다른 글
[데이터베이스] DB 연동 웹사이트 (0) | 2022.02.10 |
---|---|
[C언어] 문자열의 마지막 문자 변경 (0) | 2022.02.08 |
[C언어] 문자열 배열의 순서를 바꾸는 함수 (0) | 2022.02.07 |
[C언어] 포인터로 값 복사 (0) | 2022.02.06 |
[C언어] 포인터로 문자열 복사 (0) | 2022.02.05 |