Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки программирования (пособие).doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
965 Кб
Скачать
☆

4.4.4Ввод и вывод содержимого структуры

Вывод значений полей структуры осуществляется аналогично переменным с учетом их типа:

cout << manager.name << endl;

cout << manager.age << endl;

cout << manager.salary << endl;

Ввод также аналогичен.

cin >> manager.name;

cin >> manager.age;

cin >> manager.salary;

4.4.5Вложенные структуры

Пусть для каждого сотрудника требуется хранить его адрес, который состоит из нескольких полей: улица (street), номер дома (house) и номер квартиры (flat). В таком случае адрес разумно также представить в виде структуры.

struct Address {

string street;

int house;

int flat;

};

Одним из полей структуры Worker будет структура Address.

struct Worker {

string name;

int age;

float salary;

Address address;

};

Обращение к полям вложенной структуры Address происходит через поля структуры Worker.

manager.address.street = "Ленина";

manager.address.house = 10;

manager.address.flat = 7;

cout << manager.address.street;

cout << manager.addrress.house;

cout << manager.address.flat;

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

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

const int SIZE = 5;

Worker workers[SIZE];

Значения полям элементов массива структур можно задать при его объявлении, перечислив поля в том порядке, который указан при объявлении структуры:

Worker workers[SIZE] = {

{"Андрей", 30, 5000},

{"Светлана", 51, 2000},

{"Дмитрий", 45, 3000},

{"Анна", 28, 4000},

{"Василий", 37, 1000}

};

а можно и после объявления:

workers[0].name = "Игорь";

workers[0].age = 53;

workers[0].salary = 2500;

workers[1].name, "Демьян";

workers[1].age = 57;

workers[1].salary = 1500;

4.4.7Вывод массива структур в виде таблицы

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

for (int i=0; i<SIZE; i++) {

printf("%s ", workers[i].name);

printf("%d ", workers[i].age);

printf("%g\n", workers[i].salary);

}

Такой способ отображает весь массив, но колонки при этом неровные (рис. 35).

Рисунок 35. Неровные столбцы

Для ровного вывода следует воспользоваться табуляцией – «\t» (рис. 36).

for (int i=0; i<SIZE; i++) {

printf("%s\t", workers[i].name);

printf("%d\t", workers[i].age);

printf("%g\n", workers[i].salary);

}

Рисунок 36. Ровные столбцы

Однако и в данном случае могут возникнуть проблемы. Например, если одно из имен слишком длинное (рис. 37).

Рисунок 37. Опять неровные столбцы

Хорошим способом решения этой проблемы является использование модификатора количества позиций под переменную (рис. 38).

for (int i=0; i<SIZE; i++) {

printf("%10s\t", workers[i].name);

printf("%d\t", workers[i].age);

printf("%g\n", workers[i].salary);

}

Рисунок 38. Ровные столбцы

Наконец, для выравнивания по левому краю существует модификатор «-» (рис. 39).

for (int i=0; i<SIZE; i++) {

printf("%-10s\t", workers[i].name);

printf("%d\t", workers[i].age);

printf("%g\n", workers[i].salary);

}

Рисунок 39. Выравнивание по левому краю