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.
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:
- Dùng định nghĩa struct
Contactnhư trong các bài học trước, gồm các thành viên:- Mảng ký tự
namecó kích thước 50 - Mảng ký tự
phonecó kích thước 20 - Mảng ký tự
emailcó kích thước 40 - Số nguyên
age
- Mảng ký tự
- Dùng hàm
createContactnhư 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ệ
- Cấp phát bộ nhớ động cho một struct
- Viết một hàm tên là
populateContact, hàm này:- Nhận con trỏ đến struct
Contactlà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ằngscanf("%s", contactPtr->name) - In ra
Enter phone:và đọc một chuỗi vào trường phone bằngscanf("%s", contactPtr->phone) - In ra
Enter email:và đọc một chuỗi vào trường email bằngscanf("%s", contactPtr->email) - In ra
Enter age:và đọc một số nguyên vào trường age bằngscanf("%d", &contactPtr->age)
- In ra
- 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 raInvalid phone number - Nếu tất cả điều kiện kiểm tra đều đạt, in ra
Contact populated successfully
- Nếu age nhỏ hơn 0 hoặc lớn hơn 120, in ra
- Nhận con trỏ đến struct
- 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
- Tạo một liên hệ bằng hàm
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
1Nền tảng về con trỏ
Con trỏ là gì?Khai báo con trỏToán tử lấy địa chỉ (&)Toán tử giải tham chiếu (*)Con trỏ NULLÔn tập: kiến thức cơ bản về con trỏ4Dự án: Công cụ xử lý văn bản đơn giản
Tổng quan dự ánĐếm ký tự2Con trỏ và mảng
Tên mảng dưới dạng con trỏPhần tử mảng và con trỏPhép toán con trỏSo sánh con trỏÔn tập: duyệt mảng bằng con trỏ5Con trỏ và hàm
Truyền theo giá trịTruyền con trỏ vào hàmSửa đổi biến qua con trỏVí dụ kinh điển: hoán đổiTruyền mảng vào hàmÔn tập: đối số con trỏ hàm3Mảng ký tự và chuỗi
Chuỗi dưới dạng mảng charKý tự kết thúc nullNhập chuỗi bằng scanfDùng strlen()Dùng strcpy()Dùng strcat()Dùng strcmp()Ôn tập: các hàm xử lý chuỗi cơ bản6Quản lý bộ nhớ
Bộ nhớ ngăn xếp và bộ nhớ heapCấp phát động với malloc()Dùng sizeof() để cấp phátKiểm tra lỗi cấp phátGiải phóng bộ nhớ với free()Cấp phát với calloc()Ôn tập: Mảng động9Dự án: Nhập thông tin liên hệ đơn giản
Định nghĩa struct ContactHàm tạo liên hệTự luyện tập: Trình biên dịch C online