연락처 데이터 채우기 함수
Coddy C 여정의 논리 & 흐름 섹션에 포함된 레슨. 63개 중 52번째.
챌린지
쉬움이전 단원에서 만든 연락처 생성 함수를 바탕으로, 사용자 입력으로 연락처 정보를 채우는 함수를 만드세요. 프로그램은 다음을 수행해야 합니다.
- 이전 단원에서 사용한 것과 동일한
Contact구조체 정의를 사용하세요. 멤버는 다음과 같습니다.- 크기가 50인 문자 배열
name - 크기가 20인 문자 배열
phone - 크기가 40인 문자 배열
email - 정수
age
- 크기가 50인 문자 배열
- 이전 단원에서 사용한 것과 동일한
createContact함수를 사용하되, 더 이상Contact created successfully를 출력하지 않도록printf행을 제거하세요. 이 함수는 여전히 다음을 수행합니다.Contact구조체를 위한 메모리를 동적으로 할당합니다.- 모든 멤버를 기본값으로 초기화합니다.
- 연락처를 가리키는 포인터를 반환합니다.
populateContact라는 함수를 작성하세요. 이 함수는 다음을 수행합니다.Contact구조체를 가리키는 포인터를 매개변수로 받습니다.- 아무것도 반환하지 않습니다(void).
- 사용자에게 입력을 요청하고, 다음 데이터를 정확히 이 순서대로 읽습니다.
Enter name:을 출력하고scanf("%s", contactPtr->name)을 사용하여 문자열을 name 필드에 읽어 들입니다.Enter phone:을 출력하고scanf("%s", contactPtr->phone)을 사용하여 문자열을 phone 필드에 읽어 들입니다.Enter email:을 출력하고scanf("%s", contactPtr->email)을 사용하여 문자열을 email 필드에 읽어 들입니다.Enter age:를 출력하고scanf("%d", &contactPtr->age)를 사용하여 정수를 age 필드에 읽어 들입니다.
- 모든 입력을 읽은 후 데이터를 검증합니다.
- 나이가 0보다 작거나 120보다 크면
Invalid age entered를 출력합니다. - 전화번호 길이가 10자보다 짧으면(
strlen()사용)Invalid phone number를 출력합니다. - 모든 검증을 통과하면
Contact populated successfully를 출력합니다.
- 나이가 0보다 작거나 120보다 크면
- main 함수에서 다음을 수행하세요.
createContact함수를 사용하여 연락처를 만듭니다.- 연락처 생성이 성공했는지 확인합니다.
populateContact함수를 호출하여 연락처 데이터를 채웁니다.- 데이터를 채운 후, 화살표 연산자를 사용해 다음과 같은 정확한 형식으로 연락처 정보를 표시합니다.
Contact Information:Name: [name]Phone: [phone]Email: [email]Age: [age]
- 동적으로 할당된 메모리를 해제합니다.
Contact deleted successfully을 출력합니다.
이 과제에서는 포인터를 통해 구조체 데이터를 수정하는 함수를 만드는 방법을 알아봅니다. populateContact 함수는 연락처를 가리키는 포인터를 받아 화살표 연산자를 사용하여 원래 구조체의 멤버를 직접 수정합니다. 사용자 입력 처리, 데이터 검증, 함수 매개변수로 전달된 동적 할당 구조체를 다루는 방법을 연습하게 됩니다.
직접 해보기
#include <stdio.h>
#include <stdlib.h>
struct Contact {
char name[50];
char phone[20];
char email[40];
int age;
};
struct Contact* createContact() {
struct Contact* contactPtr = (struct Contact*)malloc(sizeof(struct Contact));
if (contactPtr == NULL) {
printf("Memory allocation failed\n");
return NULL;
}
printf("Contact created successfully\n");
contactPtr->name[0] = '\0';
contactPtr->phone[0] = '\0';
contactPtr->email[0] = '\0';
contactPtr->age = 0;
return contactPtr;
}
int main() {
struct Contact* newContact;
newContact = createContact();
if (newContact == NULL) {
printf("Failed to create contact\n");
return 1;
}
printf("Contact initialized with default values\n");
printf("Default Contact Values:\n");
printf("Name: %s\n", newContact->name);
printf("Phone: %s\n", newContact->phone);
printf("Email: %s\n", newContact->email);
printf("Age: %d\n", newContact->age);
free(newContact);
printf("Memory freed successfully\n");
return 0;
}논리 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러