본문 바로가기

C lang

[C language] Geany편집기 -15. Structure - scanf (입력 값으로 구조체 초기화)

 

#정리

# struct_scanf - 구조체 값을 입력 받는 법

// scanf의 입력 받은 값을 구조체에 넣으려면 구조체 포인터 변수를 준비해야한다.

 - Score *pt_s = &s; // 포인터 변수 준비

<1. 문자열의 경우 : 포인터 변수로 접근한 값으로 받는다. - 문자열은 값이 주소값으로 시작된다. >
 - s.name=malloc(sizeof(char)*10); //동적 메모리 할당
 - scanf("%s",pt_s->name); //포인터로 값 접근하여 입력 받은 값 할당

<2. 숫자형의 경우 : 주소값 (&) 으로 받는다.>

 - scanf("%d",&pt_s->kor);//->접근 후 &주소값 변환

 

 

 

 

# struct_scanf - 구조체 값을 입력 받는 법

// scanf의 입력 받은 값을 구조체에 넣으려면 구조체 포인터 변수를 준비해야한다.

 (scanf의 입력 받은 값은 -> 연산자로 밖에 접근을 못하고, -> 연산자는 포인터와 같이 사용된다.)

 - Score *pt_s = &s; // 포인터 변수 준비

<1. 문자열의 경우 : 포인터 변수로 접근한 값으로 받는다. - 문자열은 값이 주소값으로 시작된다. >
 - s.name=malloc(sizeof(char)*10); //동적 메모리 할당
 - scanf("%s",pt_s->name); //포인터로 값 접근하여 입력 받은 값 할당

<2. 숫자형의 경우 : 주소값 (&) 으로 받는다.>

 - scanf("%d",&pt_s->kor);//->접근 후 &주소값 변환

//일일히 받은 값을 구조체에 넣어줄 수 있지만, 효율이 좋지 않다.

 - s.name = name; 


 

--예문 코드 보기--

더보기
#include <stdio.h>
#include <stdlib.h>

#pragma pack(1)

typedef struct{
	char* name;
	int kor;
}Score;

int main(int argc, char **argv)
{
	printf("struct scanf...\n");
	printf("-----string/int-------\n");
	printf("Input name...\n");
	char *name=malloc(sizeof(char)*10);
	scanf("%s",name);
	printf("name: %s\n",name);
	
	int kor;
	printf("Input kor : \n");
	scanf("%d",&kor);
	printf("kor: %d\n",kor);
	
	printf("----- struct & scanf ------\n");
	Score s;
	//s.name = name; //일일히 받은 값을 구조체에 넣어줄 수 있지만, 효율이 좋지 않다.
	Score *pt_s = &s;
	
	//scanf의 입력 받은 값은 -> 연산자로 밖에 접근을 못하고, -> 연산자는 포인터와 같이 사용된다.
	//따라서 scanf의 입력 받은 값을 구조체에 넣으려면 구조체 포인터 변수를 준비해야한다.
	s.name=malloc(sizeof(char)*10);
	printf("Input pt_s->name...\n");
	scanf("%s",pt_s->name);//s.name으로 넣을 수 없다.
	printf("pt_s->name: %s\n",pt_s->name);//출력은 두 가지 방법 모두 가능
	printf("s.name: %s\n",s.name);
	
	printf("Input &pt_s->kor : \n");
	scanf("%d",&pt_s->kor);//->접근 후 &주소값 변환
	printf("pt_s->kor: %d\n",pt_s->kor);
	printf("s.kor: %d\n",s.kor);
	
	return 0;
}