Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Моя первая программа на С++.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Присвоение начального значения

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

struct CD

{

char name[20];

char description[40]; char category[12]; float cost; int number;

} disc = {"Лучшие песни", "Тини Тим", "поп-музыка", 12.50, 12};

В этих инструкциях мы создали структуру CD, определили переменную disc и присвоили начальные зна- чения всем пяти членам структуры (рис.11.6).

¶a++ae æepcue u+uru æɵuyye+a sneuwpo++ɵu usgawenacwæou "Books-shop".

Pacupocwpa+e+ue, upogaua, uepesauuca ga++on u+uru unu ee ¬acwen 3AMPE[EHª.

O æcex +apyue+uex upoca6a coo6yawa uo agpecy piracy@books-shop.com

Рис. 11.6. Инициализация структурной переменной

Как другой возможный вариант, можно инициализировать члены структуры при определении переменной:

struct CD disc = {"Моя жизнь", "Биография Б. Гейтса",

"книга на диске", 24.99, 213};

Поскольку Си является языком свободного формата, можно записать процедуру присваивания в несколько строк, однако символы внутри кавычек при этом переносить не следует.

Структуру можно определить как глобальную, перед функцией main(), или как локальную, записав опре- деление внутри main() или другой функции. Но! Если вы хотите присвоить начальное значение структуре, которая содержит строки, ее обязательно следует определять перед main(), или как статическую пере- менную:

static struct CD;

Использование структуры

Член структуры всегда является частью структуры. Нельзя обратиться к структурному элементу как к та- ковому. Например, если вы попытаетесь присвоить значение члену cost структуры CD, используя следую- щий синтаксис

cost = 23.13;

компилятор сгенерирует ошибку, вызванную тем, что переменная cost не была определена. Для перемен- ной с таким именем не была зарезервирована никакая область памяти. Переменная, которая вас интере- сует, называется disc, и именно она содержит элемент с именем cost. Для того чтобы обратиться к члену структуры, необходимо указать его вместе с именем переменной, используя следующий формат:

structure_variable.member_name

Такая запись означает, что необходимо указать имя структурной переменной, поставить точку, а затем указать имя члена структуры, как это сделано в инструкциях:

gets(disc.name); gets(disc.description); gets(disc.category); disc.cost = 16.95;

disc.number = 5;

Эти инструкции говорят компилятору, в какую именно область памяти следует поместить введенное зна- чение, например, в член name структурной переменной disc.

Получение значений членов структуры осуществляется аналогичным образом, с точкой между именем структурной переменной и именем члена. В Листинге11.1 приведен текст программы, в которой вводится,

а затем отображается на экране информация о картотеке компакт-дисков. В тексте программы нет ни од- ного случая, когда бы имя члена структуры использовалось без указания имени структурной переменной.

Вводить и выводить значения элементов структуры можно в любом порядке, не обязательно придержи- ваться именно того, который указан в описании структуры.

Листинг 11.1. Использование структуры при вводе и выводе.

/*CD1.c*/ struct CD

main()

{

char name[20];

char description[40];char category[12]; float cost;

int number;

} disc;

{

puts("Введите сведения о диске\n\n"); printf("Введите название: "); gets(disc.name); printf("Введите описание: "); gets(disc.description); printf("Введите категорию: "); gets(disc.category); printf("Введите цену: ");

scanf("%f", &dics.cost); printf("Введите номер ячейки: "); scanf("%d", &disc.number);

puts("Введена следующая информация о диске:\n\n"); printf("Название: %s\n", disc.name); printf("Описание: %s\n", disc.description); printf("Категория: %s\n", disc.category); printf("Цена: %6.2f\n", disc.cost); printf("Номер п/п: %d\n", disc.number);

}

Массивы структур

До сих пор мы работали с эквивалентом только одной регистрационной карточки. Но мы определили структуру с тем, чтобы хранить информацию обо всей коллекции записей. Для этого надо использовать не одиночную переменную, а массив. Создавая массив структур, мы создаем массив шаблонов. Такой массив можно определить, используя индекс с именем структурной переменной:

struct CD disc[10];

Таким образом, мы резервируем десять областей памяти, каждая из которых обладает достаточным объе- мом, чтобы хранить целую структуру (рис.11.7). Обращение к элементу массива происходит путем указа- ния соответствующего индекса после имени самой структурной переменной, а не члена структуры:

gets(disc[0].name);

gets(disc[1].name);

В Листинге 11.2 приведен текст программы, использующей массив структур для выполнения задачи, кото- рая может встретиться в реальной жизни, а именно, для заполнения регистрационных карточек, состав- ляющих картотеку коллекции компакт-дисков.

Листинг 11.2. Использование массива структур.

/*CD2.c*/ struct CD

main()

{

char name[20];

har description[40]; har category[12]; float cost; int number;

} disc[10];

{

int index, repeat; har flag; flag = 'Y';

index =0; do

#%d\n", index);

{