Menu
Coddy logo textTech

Функция для заполнения контакта

Часть раздела Logic & Flow путешествия по C на Coddy — урок 52 из 63.

challenge icon

Задание

Легко

Опираясь на вашу функцию создания контакта из предыдущего урока, создайте функцию, которая заполняет контакт данными, введенными пользователем. Ваша программа должна:

  1. Использовать то же определение структуры Contact из предыдущих уроков со следующими полями:
    • Массив символов name размером 50
    • Массив символов phone размером 20
    • Массив символов email размером 40
    • Целое число age
  2. Использовать ту же функцию createContact из предыдущего урока, которая:
    • Динамически выделяет память для структуры Contact
    • Инициализирует все поля значениями по умолчанию
    • Возвращает указатель на контакт
  3. Написать функцию с именем populateContact, которая:
    • Принимает указатель на структуру Contact в качестве параметра
    • Ничего не возвращает (void)
    • Запрашивает ввод у пользователя и считывает следующие данные именно в таком порядке:
      • Выводит Enter name: и считывает строку в поле name, используя scanf("%s", contactPtr->name)
      • Выводит Enter phone: и считывает строку в поле phone, используя scanf("%s", contactPtr->phone)
      • Выводит Enter email: и считывает строку в поле email, используя scanf("%s", contactPtr->email)
      • Выводит Enter age: и считывает целое число в поле age, используя scanf("%d", &contactPtr->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;
}

Все уроки раздела Logic & Flow