Menu
CoddyTech

创建联系人的函数

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

challenge icon

挑战

简单

在上一课的 Contact 结构体基础上,创建一个函数,为新的联系人动态分配内存。你的程序应当:

  1. 使用上一课中相同的 Contact 结构体定义,其中包含以下成员:
    • 一个大小为 50 的字符数组 name
    • 一个大小为 20 的字符数组 phone
    • 一个大小为 40 的字符数组 email
    • 一个整数 age
  2. 编写一个名为 createContact 的函数,该函数:
    • 不接受任何参数
    • 返回一个指向 Contact 结构体的指针
    • 使用 malloc() 为一个 Contact 结构体动态分配内存
    • 检查内存分配是否成功:
      • 如果分配失败(返回 NULL),打印 Memory allocation failed 并返回 NULL
      • 如果分配成功,打印 Contact created successfully
    • 使用箭头运算符将所有结构体成员初始化为默认值:
      • 使用 contactPtr->name[0] = '\0'; 将 name 设为空字符串
      • 使用 contactPtr->phone[0] = '\0'; 将 phone 设为空字符串
      • 使用 contactPtr->email[0] = '\0'; 将 email 设为空字符串
      • 使用 contactPtr->age = 0; 将 age 设为 0
    • 返回指向新创建的联系人的指针
  3. 在 main 函数中:
    • 声明一个指向 Contact 结构体的指针,命名为 newContact
    • 调用 createContact 函数,并将返回的指针赋给 newContact
    • 检查联系人是否创建成功:
      • 如果 newContact 为 NULL,打印 Failed to create contact 并退出程序
      • 如果创建成功,打印 Contact initialized with default values
    • 使用箭头运算符,按以下确切格式显示初始化后的联系人信息:
      • Default Contact Values:
      • Name: [name](内容为空)
      • Phone: [phone](内容为空)
      • Email: [email](内容为空)
      • Age: [age](值为 0)
    • 使用 free(newContact) 释放动态分配的内存
    • 打印 Memory freed successfully

本挑战将介绍工厂函数的概念,也就是创建并返回指向动态分配的结构体的指针的函数。你将练习动态内存分配、正确的错误检查、通过指针初始化结构体,以及清理内存。

亲手试试

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

逻辑与流程中的所有课

自己练习: C 在线编译器