Функция для заполнения контакта
Часть раздела Logic & Flow путешествия по C на Coddy — урок 52 из 63.
Задание
ЛегкоОпираясь на вашу функцию создания контакта из предыдущего урока, создайте функцию, которая заполняет контакт данными, введенными пользователем. Ваша программа должна:
- Использовать то же определение структуры
Contactиз предыдущих уроков со следующими полями:- Массив символов
nameразмером 50 - Массив символов
phoneразмером 20 - Массив символов
emailразмером 40 - Целое число
age
- Массив символов
- Использовать ту же функцию
createContactиз предыдущего урока, которая:- Динамически выделяет память для структуры
Contact - Инициализирует все поля значениями по умолчанию
- Возвращает указатель на контакт
- Динамически выделяет память для структуры
- Написать функцию с именем
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
- Если возраст меньше 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;
}Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции6Управление памятью
Стек против кучиДинамическое выделение — malloc()Использование sizeof() для выделения памятиПроверка ошибок выделения памятиОсвобождение памяти с помощью free()Выделение памяти с помощью calloc()Итоги: Динамический массив9Проект: Простой ввод контактов
Проект: Определение структуры ContactФункция для создания контакта