연락처 생성 함수
Coddy C 여정의 논리 & 흐름 섹션에 포함된 레슨. 63개 중 51번째.
챌린지
쉬움이전 레슨의 Contact 구조체를 기반으로, 새 연락처를 위한 메모리를 동적으로 할당하는 함수를 작성하세요. 프로그램은 다음을 수행해야 합니다.
- 이전 레슨과 동일한
Contact구조체 정의를 사용하며, 다음 멤버를 포함해야 합니다.- 크기가 50인 문자 배열
name - 크기가 20인 문자 배열
phone - 크기가 40인 문자 배열
email - 정수
age
- 크기가 50인 문자 배열
createContact라는 이름의 함수를 작성하세요. 이 함수는 다음을 수행해야 합니다.- 매개변수를 받지 않음
Contact구조체를 가리키는 포인터를 반환함malloc()을 사용하여 하나의Contact구조체를 위한 메모리를 동적으로 할당함- 메모리 할당이 성공했는지 확인함:
- 할당에 실패하면(NULL을 반환하면)
Memory allocation failed를 출력하고 NULL을 반환함 - 할당에 성공하면
Contact created successfully를 출력함
- 할당에 실패하면(NULL을 반환하면)
- 화살표 연산자를 사용하여 모든 구조체 멤버를 기본값으로 초기화함:
contactPtr->name[0] = '\0';을 사용하여name을 빈 문자열로 설정함contactPtr->phone[0] = '\0';을 사용하여phone을 빈 문자열로 설정함contactPtr->email[0] = '\0';을 사용하여email을 빈 문자열로 설정함contactPtr->age = 0;을 사용하여age를 0으로 설정함
- 새로 생성된 연락처를 가리키는 포인터를 반환함
- main 함수에서 다음을 수행하세요.
newContact라는 이름의Contact구조체 포인터를 선언함createContact함수를 호출하고 반환된 포인터를newContact에 할당함- 연락처 생성이 성공했는지 확인함:
newContact가 NULL이면Failed to create contact를 출력하고 프로그램을 종료함- 성공하면
Contact initialized with default values를 출력함
- 화살표 연산자를 사용하여 다음의 정확한 형식으로 초기화된 연락처 정보를 표시함:
Default Contact Values:Name: [name](비어 있음)Phone: [phone](비어 있음)Email: [email](비어 있음)Age: [age](0이 됨)
free(newContact)를 사용하여 동적으로 할당된 메모리를 해제함Memory freed successfully를 출력함
이 챌린지에서는 팩토리 함수, 즉 동적으로 할당된 구조체를 생성하고 해당 구조체를 가리키는 포인터를 반환하는 함수를 소개합니다. 동적 메모리 할당, 적절한 오류 확인, 포인터를 통한 구조체 초기화 및 메모리 정리를 연습하게 됩니다.
직접 해보기
#include <stdio.h>
#include <string.h>
// TODO: Define the Contact struct here
struct Contact {
char name[50];
char phone[20];
char email[40];
int age;
};
int main() {
// TODO: Create a Contact variable named person
struct Contact person;
// Read input values
scanf("%s", person.name);
scanf("%s", person.phone);
scanf("%s", person.email);
scanf("%d", &person.age);
// TODO: Write your validation and output code below
if (person.age < 0 || person.age > 120) {
printf("Invalid age");
return 0;
}
if (strlen(person.phone) < 10) {
printf("Invalid phone number");
return 0;
}
printf("Contact Information:\n");
printf("Name: %s\n", person.name);
printf("Phone: %s\n", person.phone);
printf("Email: %s\n", person.email);
printf("Age: %d\n", person.age);
printf("Name length: %lu\n", strlen(person.name));
if (person.age >= 0 && person.age <= 17) {
printf("Category: Minor");
} else if (person.age >= 18 && person.age <= 64) {
printf("Category: Adult");
} else {
printf("Category: Senior");
}
return 0;
}논리 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러