티스토리 뷰

BackEnd/C

[28일차] 숙제 - 구조체 예제

JINSUKUKU 2021. 3. 12. 23:59

예제 1.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct book{
	char name[40];
	char author[40];
	int price;
	char *info;
};


int main(void){
	struct book book1 = {"혼자 공부하는 C언어", "서현우", 21600};
	struct book book2 = {"C언어 코딩도장", "남재윤", 22500};
	
	book1.info = (char*)malloc(sizeof(char)*100);
	book2.info = (char*)malloc(sizeof(char)*100);	
	
	strcpy(book1.info,"1대1 과외하듯 배우는 프로그래밍 자습서");
	strcpy(book2.info,"프로그래밍은 연습으로 배우는 것이다!");
	
	printf("도서명\t\t\t저자\t가격\t책 소개\n");
	printf("%s\t\%s\t%d\t%s\n",book1.name, book1.author, book1.price, book1.info);
	printf("%s\t\t\%s\t%d\t%s\n",book2.name, book2.author, book2.price, book2.info);
	
    return 0;
}

 

 

예제 2-1.

#include <stdio.h>

struct profile{
  // 길이가 20인 char 배열 name 멤버 선언
  char name[20];
  // int형 age 멤버 선언
  int age;
};

// profile 구조체 pf를 매개변수로 받고, 반환하는 함수 input_profile 작성
// 함수 내부에는 scanf로 name, age에 값을 입력받는 코드 작성
struct profile input_profile(struct profile pf){
  printf("이름 입력 : ");
  scanf("%s",pf.name);
  printf("나이 입력 : ");
  scanf("%d",&pf.age);
  return pf;
}

// profile 구조체 pf를 매개변수로 받는 함수 print_profile 작성
// 함수 내부에는 printf로 name, age를 출력하는 코드 작성
void print_profile(struct profile pf){
  printf("---------------\n");
  printf("이름 : %s\n",pf.name);
  printf("나이 : %d\n",pf.age);
}


int main(void){
  // profile 구조체 변수 pf 선언
  struct profile pf;
  // input_profile에 pf를 인수로 전달하여 호출하고, 리턴값을 pf에 저장
  pf = input_profile(pf);
  // print_profile에 pf를 인수로 전달하여 호출
  print_profile(pf);

  return 0;
}

 

 

예제 2-2.

✔  구조체 변수의 주소를 받기 위해서는 구조체 포인터 변수를 사용한다.

✔  구조체 포인터 변수에 간접 참조 연산자 * 과 멤버 접근 연산자 . 을 같이 사용한다면 우선순위에 주의하자.

✔  구조체 포인터 변수를 사용해 멤버 변수에 접근할 때는 화살표 연산자 -> 를 사용하는 편이 편리하다.

#include <stdio.h>

struct profile{
  // 길이가 20인 char 배열 name 멤버 선언
  char name[20];
  // int형 age 멤버 선언
  int age;
};

// ★ 매개 변수로 구조체 변수의 주소 받기 ★ //
void input_profile(struct profile *pf){
  printf("이름 입력 : ");
  scanf("%s",(*pf).name);
  // scanf("%s",pf->name);	
  
  printf("나이 입력 : ");
  scanf("%d",&(*pf).age);
  // scanf("%d",&(pf->age));
}

// ★ 매개 변수로 구조체 변수의 주소 받기 ★ //
void print_profile(struct profile *pf){
  printf("---------------\n");
  // printf("이름 : %s\n",(*pf).name);
  // printf("나이 : %d\n",(*pf).age);
  
  //화살표 연산자
  printf("이름 : %s\n",pf->name);
  printf("나이 : %d\n",pf->age);
}


int main(void){
  // profile 구조체 변수 pf 선언
  struct profile pf;
  // ★함수의 인수로 구조체 변수의 주소를 전달★ //
  input_profile(&pf);
  print_profile(&pf);

  return 0;
}

 

 

 

 

 

댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday