Menu
CoddyTech

Hàm tạo liên hệ

Thuộc phần Logic và luồng điều khiển trong hành trình C của Coddy. Bài học 51 trên 63.

challenge icon

Thử thách

Dễ

Dựa trên struct Contact từ bài học trước, hãy tạo một hàm cấp phát động bộ nhớ cho một liên hệ mới. Chương trình của bạn cần:

  1. Dùng cùng định nghĩa struct Contact từ bài học trước với các thành viên:
    • Một mảng ký tự name có kích thước 50
    • Một mảng ký tự phone có kích thước 20
    • Một mảng ký tự email có kích thước 40
    • Một số nguyên age
  2. Viết một hàm tên là createContact để:
    • Không nhận tham số nào
    • Trả về con trỏ đến struct Contact
    • Dùng malloc() để cấp phát động bộ nhớ cho một struct Contact
    • Kiểm tra xem việc cấp phát bộ nhớ có thành công không:
      • Nếu cấp phát thất bại (trả về NULL), in ra Memory allocation failed và trả về NULL
      • Nếu cấp phát thành công, in ra Contact created successfully
    • Khởi tạo tất cả thành viên của struct bằng giá trị mặc định thông qua toán tử mũi tên:
      • Đặt name thành chuỗi rỗng bằng cách dùng contactPtr->name[0] = '\0';
      • Đặt phone thành chuỗi rỗng bằng cách dùng contactPtr->phone[0] = '\0';
      • Đặt email thành chuỗi rỗng bằng cách dùng contactPtr->email[0] = '\0';
      • Đặt age thành 0 bằng cách dùng contactPtr->age = 0;
    • Trả về con trỏ đến liên hệ vừa tạo
  3. Trong hàm main:
    • Khai báo một con trỏ đến struct Contact tên là newContact
    • Gọi hàm createContact và gán con trỏ được trả về cho newContact
    • Kiểm tra xem việc tạo liên hệ có thành công không:
      • Nếu newContact là NULL, in ra Failed to create contact và thoát chương trình
      • Nếu thành công, in ra Contact initialized with default values
    • Hiển thị thông tin liên hệ đã khởi tạo bằng toán tử mũi tên theo đúng định dạng sau:
      • Default Contact Values:
      • Name: [name] (sẽ để trống)
      • Phone: [phone] (sẽ để trống)
      • Email: [email] (sẽ để trống)
      • Age: [age] (sẽ là 0)
    • Giải phóng bộ nhớ đã cấp phát động bằng free(newContact)
    • In ra Memory freed successfully

Thử thách này giới thiệu khái niệm hàm nhà máy (factory function), tức là các hàm tạo và trả về con trỏ đến struct được cấp phát động. Bạn sẽ luyện tập cấp phát bộ nhớ động, kiểm tra lỗi đúng cách, khởi tạo struct thông qua con trỏ và dọn dẹp bộ nhớ.

Tự làm thử

#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;
}

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch C online