填写联系人信息的函数
本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 52 课,共 63 课。
挑战
简单在上一课创建联系人的函数基础上,创建一个使用用户输入填充联系人的函数。你的程序应当:
- 使用前几课中相同的
Contact结构体定义,其中包含以下成员:- 大小为 50 的字符数组
name - 大小为 20 的字符数组
phone - 大小为 40 的字符数组
email - 整数
age
- 大小为 50 的字符数组
- 使用上一课中相同的
createContact函数,该函数:- 为
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 字段
- 输出
- 读取所有输入后,验证数据:
- 如果 age 小于 0 或大于 120,则输出
Invalid age entered - 如果电话号码长度少于 10 个字符(使用
strlen()),则输出Invalid phone number - 如果所有验证都通过,则输出
Contact populated successfully
- 如果 age 小于 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 在线编译器