반응형
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NUMBER 10
//구조체를 정적 메모리 할당 후 사용자로부터 자료를 입력 받아 프린트 하는 program을 작성한다.
//구조체 포인터 활용
typedef struct _person{
char name[20];
int age;
char address[40];
}t_person; //위에 struct _person을 t_person으로 재정의하는거임 재정의한다고해서 보통 t_를 붙여줌
void print_person(t_person *p, int *n);
void copy_person(t_person *p, t_person *p1 ,int *n);
int main(void)
{
t_person p1[NUMBER];
//위에 구조체랑 이름이 같아도 구조체 내부는 블록으로 봄-> 충돌 X
t_person temp;
int i=0;
while(1)
{
printf("Enrer name age address (exit: end 0 end) ");
scanf("%s",&temp.name);
scanf("%d",&temp.age);
scanf("%s",&temp.address);
if(!strncmp(temp.name,"end",strlen("end")))//strncmp 값이 같으면 null을 리턴받음
{
break;
}
else
{
copy_person(&p1,&temp,&i);
}
}
print_person(&p1,&i);
}
void print_person(t_person *p, int *n)
{
int i;
t_person *pt=p;// 항상 포인터 조작할때는 새로 만들어서 덮어씌운걸로 조작
if(*n==0){
printf("n이 0이네?\n");
}
else
{
printf("이름 나이 주소\n");
printf("=== ==== =======================\n");
for(i=0; i<*n;i++)
{
//printf("%-6s %d %s\n",*(pt).name,*(pt).age,*(pt).address);
printf("%-6s %d %s\n",pt->name,pt->age,pt->address);//통상 구조체 포인터 멤버 편수를 표현할때에는 이렇게 표현함
pt++;
}
printf("====================================\n");
}
}
void copy_person(t_person *p, t_person *p1 ,int *n)
{
t_person *pt=p+*n;// 항상 포인터 조작할때는 새로 만들어서 덮어씌운걸로 조작
// 위 처럼 하든지 main문 안에서 copy_person(&p1,&temp,&i);를 하든지
strncpy(pt->name,p1->name,strlen(p1->name)); //strcpy(pt->name,tp1->name)도 가능
pt->age=p1->age;
strncpy(pt->address,p1->address,strlen(p1->address));
*n+=1;
}
반응형
'C Programming' 카테고리의 다른 글
[C] 공용체를 활용한 비트 연산 (0) | 2023.10.14 |
---|---|
[C]텍스트 파일 2개 열고 단어 비교 후 등록 안된 단어 다른 텍스트 파일에 저장 (1) | 2023.10.14 |
[C]실수 값 오름차순 정렬 (0) | 2023.10.14 |
[C]대소문자 변환 프로그램 (0) | 2023.10.14 |
[C]소수 출력 프로그램 (0) | 2023.10.14 |