Menu
CoddyTech

填写联系人信息的函数

本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 52 课,共 63 课。

challenge icon

挑战

简单

在上一课创建联系人的函数基础上,创建一个使用用户输入填充联系人的函数。你的程序应当:

  1. 使用前几课中相同的 Contact 结构体定义,其中包含以下成员:
    • 大小为 50 的字符数组 name
    • 大小为 20 的字符数组 phone
    • 大小为 40 的字符数组 email
    • 整数 age
  2. 使用上一课中相同的 createContact 函数,该函数:
    • 为 Contact 结构体动态分配内存
    • 将所有成员初始化为默认值
    • 返回指向联系人的指针
  3. 编写一个名为 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
  4. 在 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 在线编译器