Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_по_пяву_4.doc
Скачиваний:
101
Добавлен:
15.03.2015
Размер:
1.29 Mб
Скачать
      1. Идентификация элементов массива структур

При обращении к полям элемента структур могут возникнуть синтаксические сложности. Для их преодоления следует учитывать, что вначале надо получить доступ к элементу массива. Для этого необходимо использовать оператор []. Затем, используя оператор “.”, получить доступ к полю структуры. Дальнейшие действия зависят от типа поля.

Пример.

Пусть имеется массив, объявленный следующим образом.

#define MLEN 81 #define MSIZE 20 struct person_salary { char fio[MLEN]; double salary; }; struct person_salary arк[MSIZE];

Рассмотрим выражения, приведенные в таблице, приведенной ниже.

Выражение

Пояснение

arr[0].salary

Обращение к полю salary1-ой структуры в массивеarr

arr[1].fio

Обращение к полю fio2-ой структуры в массивеarr

arr[1].fio[2]

Обращение к 3-му символу поля fio2-ой структуры в массивеarr

  1. Работа с внешними устройствами

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

  • потоковые функции,

  • низкоуровневые функции.

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

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

    1. Понятие потока

Поток – это своего рода обобщенное устройство ввода-вывода. Такое понятие введено в рассмотрение для того, чтобы при программировании операций ввода – вывода можно было не учитывать особенности:

  • конкретного типа внешнего устройства,

  • среды, в которой выполняется программа.

Все потоки ведут себя похожим образом. Работа их не зависит от типа физического устройства.

Различают потоки двух видов:

  • текстовые,

  • двоичные.

      1. Текстовый поток

Текстовый поток – это последовательность символов, организованная в строки. Каждая строка такого потока должна заканчиваться символом новая строка ‘\n’. В конце последней строки такой символ не является обязательным.

Рассмотрим работу потока в режиме чтения. Организация строки, поступающей на вход потока, может быть любой. Она (организация) определяется внешним устройством. На выходе текстового потока строка гарантировано заканчивается символом новая строка.

При работе потока в режиме вывода картина обратная. На входе потока строка гарантировано заканчивается символом новая строка. Организация строки на выходе потока может быть любой.

В зависимости от среды, в которой выполняется программа, при использовании текстового потока могут иметь место некоторые преобразования. Например, в среде Windowsсимвол новая строка ‘\n’ преобразуется в последовательность символовCRLF.

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

Кроме того, при использовании текстового потока в режиме чтения особым способом обрабатывается символ конца файла. В таблице кодов ASCIIэтот символ имеет код 0x1A. Эта особенность состоит в том, что вся часть содержимого файла, расположенная справа от этого символа (от конца файла) не читается.