Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1
Кент Рейсдорф. BORLAND C++BUILDER. Страница 50
Листинг 2.4. (продолжение)
В этой программе есть несколько новых для вас вещей, а также дополнений к тому, что уже было изучено.
Во-первых, здесь использована функция getline() из класса cin для ввода данных пользователем (см., например, строку 19). Я сделал это из-за того, что оператор » реагирует на пробел не совсем так, как нам нужно. Второй параметр функции getline() определяет максимальное количество символов, помещаемых в буфер (в данном случае буфером является член структуры mailingListRecord). Это число выбирается таким образом, чтобы предотвратить выход за границу массивов структуры. Оператор sizeof() используется для определения размера массива, а следовательно, и буфера.
Листинг 2.5. STRUCTUR.H
Функция atoi() в строке 36 также встречается вам впервые. Она принимает строку символов и преобразует ее в целое число. Это необходимо для преобразования текста в поле ZIP-кода (который вводится пользователем как строка цифр) в целое число, которое можно сохранить в члене zip структуры mailingListRecord.
Функция displayRecord(), которая начинается со строки 76, имеет два параметра. Первый из них, num, целого типа и содержит номер выводимой записи. Эта переменная используется только для вывода на экран номера записи. В строке 78 я увеличиваю num на 1, чтобы номера на экране начинались с 1, а не с 0. Второй параметр функции displayRecord() является экземпляром структуры mailingListRecord. Внутри функции я использую локальную копию передаваемой структуры для вывода ее содержимого на экран.
Обратите внимание, что функция displayRecord() вызывается в цикле for при выводе всех записей (строка 49), а затем снова из основного тела программы для вывода выбранной записи (строка 72). Именно по этой причине для вывода записи была написана отдельная функция. Используя функцию, я избежал ненужного дублирования кода.