Menu
Coddy logo textTech

연락처 생성 함수

Coddy C 여정의 논리 & 흐름 섹션에 포함된 레슨. 63개 중 51번째.

challenge icon

챌린지

쉬움

이전 레슨의 Contact 구조체를 기반으로, 새 연락처를 위한 메모리를 동적으로 할당하는 함수를 작성하세요. 프로그램은 다음을 수행해야 합니다.

  1. 이전 레슨과 동일한 Contact 구조체 정의를 사용하며, 다음 멤버를 포함해야 합니다.
    • 크기가 50인 문자 배열 name
    • 크기가 20인 문자 배열 phone
    • 크기가 40인 문자 배열 email
    • 정수 age
  2. createContact라는 이름의 함수를 작성하세요. 이 함수는 다음을 수행해야 합니다.
    • 매개변수를 받지 않음
    • Contact 구조체를 가리키는 포인터를 반환함
    • malloc()을 사용하여 하나의 Contact 구조체를 위한 메모리를 동적으로 할당함
    • 메모리 할당이 성공했는지 확인함:
      • 할당에 실패하면(NULL을 반환하면) Memory allocation failed를 출력하고 NULL을 반환함
      • 할당에 성공하면 Contact created successfully를 출력함
    • 화살표 연산자를 사용하여 모든 구조체 멤버를 기본값으로 초기화함:
      • contactPtr->name[0] = '\0';을 사용하여 name을 빈 문자열로 설정함
      • contactPtr->phone[0] = '\0';을 사용하여 phone을 빈 문자열로 설정함
      • contactPtr->email[0] = '\0';을 사용하여 email을 빈 문자열로 설정함
      • contactPtr->age = 0;을 사용하여 age를 0으로 설정함
    • 새로 생성된 연락처를 가리키는 포인터를 반환함
  3. 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 컴파일러