Menu
CoddyTech

Hàm điền thông tin 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 52 trên 63.

challenge icon

Thử thách

Dễ

Dựa trên hàm tạo liên hệ từ bài học trước, hãy tạo một hàm điền thông tin liên hệ bằng dữ liệu người dùng nhập vào. Chương trình của bạn cần:

  1. Dùng định nghĩa struct Contact như trong các bài học trước, gồm các thành viên:
    • Mảng ký tự name có kích thước 50
    • Mảng ký tự phone có kích thước 20
    • Mảng ký tự email có kích thước 40
    • Số nguyên age
  2. Dùng hàm createContact như trong bài học trước, hàm này:
    • Cấp phát bộ nhớ động cho một struct Contact
    • Khởi tạo tất cả thành viên bằng các giá trị mặc định
    • Trả về con trỏ đến liên hệ
  3. Viết một hàm tên là populateContact, hàm này:
    • Nhận con trỏ đến struct Contact làm tham số
    • Không trả về giá trị nào (void)
    • Nhắc người dùng nhập dữ liệu và đọc các dữ liệu sau theo đúng thứ tự này:
      • In ra Enter name: và đọc một chuỗi vào trường name bằng scanf("%s", contactPtr->name)
      • In ra Enter phone: và đọc một chuỗi vào trường phone bằng scanf("%s", contactPtr->phone)
      • In ra Enter email: và đọc một chuỗi vào trường email bằng scanf("%s", contactPtr->email)
      • In ra Enter age: và đọc một số nguyên vào trường age bằng scanf("%d", &contactPtr->age)
    • Sau khi đọc tất cả dữ liệu đầu vào, kiểm tra dữ liệu:
      • Nếu age nhỏ hơn 0 hoặc lớn hơn 120, in ra Invalid age entered
      • Nếu độ dài số điện thoại nhỏ hơn 10 ký tự (dùng strlen()), in ra Invalid phone number
      • Nếu tất cả điều kiện kiểm tra đều đạt, in ra Contact populated successfully
  4. Trong hàm main:
    • Tạo một liên hệ bằng hàm createContact
    • Kiểm tra xem việc tạo liên hệ có thành công không
    • Gọi hàm populateContact để điền dữ liệu liên hệ
    • Sau khi điền dữ liệu, hiển thị thông tin liên hệ bằng toán tử mũi tên theo đúng định dạng này:
      • Contact Information:
      • Name: [name]
      • Phone: [phone]
      • Email: [email]
      • Age: [age]
    • Giải phóng bộ nhớ đã cấp phát động
    • In ra Contact deleted successfully

Thử thách này hướng dẫn cách tạo các hàm sửa đổi dữ liệu trong struct thông qua con trỏ. Hàm populateContact nhận con trỏ đến liên hệ và dùng toán tử mũi tên để sửa đổi trực tiếp các thành viên của struct ban đầu. Bạn sẽ luyện cách xử lý dữ liệu người dùng nhập vào, kiểm tra dữ liệu và làm việc với struct được cấp phát động thông qua tham số hàm.

Tự làm thử

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

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