본문 바로가기

C

[C언어] 실습: 이름을 검색하여 해당하는 연락처 출력하기 (구조체)

반응형

이름을 검색하여 해당하는 연락처 출력하기 (구조체)


#include<stdio.h>
#include<string.h>   // strcmp()

#define STR_SIZE 20

typedef struct book{
   char name[STR_SIZE];
   char phone[STR_SIZE];
   int ringtone;
} PhoneBook;   // 구조체 struct book을 phoneBook으로 선언한다.

int main(){

   PhoneBook pb[] = {   // 구조체의 변수 pb[]를 생성하고, 초기화 해준다.
      {"홍길동", "010-1111-1111", 1},
      {"장보고", "010-2222-2222", 2},
      {"김유신", "010-3333-3333", 3},
      {"이순신", "010-4444-4444", 4},
      {"유관순", "010-5555-5555", 5}
   };

   PhoneBook *p = NULL;   // 구조체의 포인터 변수 p를 생성한다. 현재 아무 주소도 가리키지 않고 있다.

   int size = sizeof(pb) / sizeof(pb[0]);   // 구조체의 변수 pb[]에 대한 index 개수를 구한다.
   char name[STR_SIZE];                     // 입력받을 이름을 저장할 변수이다.

   printf("검색할 이름을 입력하세요.\n");
   printf("이름 : ");
   scanf("%s", name);

   for(int i = 0; i < size; ++i){          // pb[] 배열을 size(index의 개수) 만큼 반복하며 찾는다.
      if(strcmp(name, pb[i].name) == 0){   // name과 pb[i].name의 문자열이 같으면 0을 반환한다.
         p = &pb[i];                       // 그리고 name과 pb[i].name이 같으면 구조체의 포인터 변수 *p에 해당하는 pb[] index의 주소값을 저장한다.
         break;                            // 검색할 이름을 찾았기 때문에 for문을 빠져 나온다.
      }
   }

   if(p == NULL)                                           // 구조체의 변수 *p에 여전히 아무값도 저장되지 않았다면,
      printf("입력한 이름의 정보가 존재하지 않습니다.\n");   // 구조체 pb[].name에 저장되지 않은 이름이다.
   else
      printf("%s의 연락처 : %s\n", p->name, p->phone);     // 구조체의 포인터 변수는 '->'를 이용하여 멤버변수에 접근한다.

   return 0;
}

 

반응형