typedef со структурами
Часть раздела Logic & Flow путешествия по C на Coddy. Урок 59 из 63.
Одним из наиболее практичных применений typedef является создание псевдонимов для типов struct. Это избавляет от необходимости повторно писать ключевое слово struct каждый раз, когда вы объявляете переменную этого типа, делая ваш код чище и читабельнее.
Когда вы комбинируете typedef с определением структуры, вы можете создать новое имя типа, которое ссылается непосредственно на структуру. Вот синтаксис:
typedef struct Point {
int x;
int y;
} Point;Теперь вместо того, чтобы писать struct Point p1; каждый раз, когда вам нужна переменная Point, вы можете просто написать Point p1;. Оба объявления выполняют абсолютно одно и то же, но версия с typedef более лаконична и легче читается.
Этот подход особенно ценен в крупных программах, где вы часто работаете с пользовательскими типами данных. Это делает ваш код более похожим на код на других языках программирования и уменьшает визуальный шум от многократного написания struct по всей программе.
Задание
ЛегкоСоздайте программу на языке C, которая демонстрирует использование typedef со структурами для создания простой системы инвентаризации книг. Ваша программа должна:
- Определить
structс именемBookсо следующими полями:- Целое число
id - Символьный массив
titleразмером 50 - Число с плавающей точкой
price - Целое число
quantity
- Целое число
- Использовать
typedefдля создания псевдонима типа с именемBookдляstruct Book - В функции main:
- Объявить две переменные типа
Bookс именамиbook1иbook2 - Считать входные данные для первой книги в следующем порядке: ID, название, цена, количество
- Присвоить эти значения полям
book1 - Считать входные данные для второй книги в следующем порядке: ID, название, цена, количество
- Присвоить эти значения полям
book2 - Вывести информацию о обеих книгах в точно таком формате:
Book 1: ID=[id], Title=[title], Price=[price], Quantity=[quantity]Book 2: ID=[id], Title=[title], Price=[price], Quantity=[quantity]
- Рассчитать и вывести общую стоимость запасов каждой книги (цена × количество) в точно таком формате:
Book 1 Total Value: [total_value]Book 2 Total Value: [total_value]
- Рассчитать и вывести общую стоимость запасов обеих книг в точно таком формате:
Combined Inventory Value: [combined_value] - Определить и вывести, какая книга имеет более высокую индивидуальную стоимость:
- Если общая стоимость book1 выше: вывести
Book 1 has higher value - Если общая стоимость book2 выше: вывести
Book 2 has higher value - Если обе стоимости равны: вывести
Both books have equal value
- Если общая стоимость book1 выше: вывести
- Объявить две переменные типа
Эта задача демонстрирует, как typedef со структурами избавляет от необходимости многократно писать struct Book в вашей программе. Вместо объявления переменных как struct Book book1;, вы можете просто написать Book book1;, что делает ваш код чище и читабельнее. Вы попрактикуетесь в объединении определения структуры с typedef, работе с полями структуры и выполнении вычислений с использованием данных структуры.
Попробуйте сами
#include <stdio.h>
#include <string.h>
// TODO: Определите вашу структуру и typedef здесь
int main() {
// TODO: Объявите ваши переменные Book здесь
// Чтение входных данных для первой книги
int id1, quantity1;
char title1[50];
float price1;
scanf("%d", &id1);
scanf("%s", title1);
scanf("%f", &price1);
scanf("%d", &quantity1);
// TODO: Присвойте значения членам book1
// Чтение входных данных для второй книги
int id2, quantity2;
char title2[50];
float price2;
scanf("%d", &id2);
scanf("%s", title2);
scanf("%f", &price2);
scanf("%d", &quantity2);
// TODO: Присвойте значения членам book2
// TODO: Выведите информацию о книгах, рассчитайте значения и сравните
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов7Структуры (structs)
Что такое структура?Объявление структурыСоздание переменных структурДоступ к членам структурыИнициализация структурПовторение: структура данных Student10Перечисления и typedef
enum для именованных константОбъявление и использование enumEnum в операторах switchИспользование typedef для псевдонимов типовtypedef со структурамиИтоги: практика по typedef и enum2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функцииПотренируйтесь самостоятельно: Онлайн-компилятор C