- •1.1.Указатели
- •1.1.1.Объявление указателей и работа с адресами
- •1.1.2.Адресная арифметика
- •1.1.3.Указатели как формальные параметры функции
- •1.1.4.Связь указателей и массивов
- •1.1.5.Константные указатели и указатели на константы
- •1.1.6.Связь указателей и строк
- •1.1.7.Преобразование указателей
- •1.1.8.Бестиповые указатели
- •1.1.9.Массив указателей
- •1.1.10.Указатели на указатели
- •1.1.11.Резервирование и освобождение памяти (операторы new и delete)
- •1.2.Типы данных, определяемые пользователем
- •1.2.1.Переопределяемые типы данных
- •1.2.2.Структуры
- •1.2.2.1.Массивы структур
- •1.2.2.2.Использование указателей на структуры
- •1.2.2.4.Динамические структуры и массивы структур
- •1.2.3.Классы
- •1.2.3.1.Введение в ооп
- •2.1.Потоки
- •2.2.Стандартные потоки
- •2.4.Файловые потоки
- •2.4.1.Общие принципы работы с файлами
- •2.4.2.Режимы открытия файлов
- •2.4.3.Текстовые и бинарные файлы и файловые потоки
- •2.4.4.Проверка состояния файла и потока
- •2.4.5.Функции (методы) ввода-вывода
- •2.4.5.1.Методы get и put
- •2.4.5.2.Метод getline
- •2.4.5.3.Методы read и write
- •2.4.6.Особенности работы с бинарными файлами
- •2.4.7.Использование текущей позиции файла
2.4.5.Функции (методы) ввода-вывода
Кроме переопределенных операций << и >>, классы istream и ostream, содержат несколько специальных методов для ввода-вывода информации. Поскольку классы файлового ввода-вывода являются "потомками" этих классов, данные методы применимы как для стандартных, так и для файловых потоков.
2.4.5.1.Методы get и put
Для посимвольного (побайтового) ввода предназначен метод get, его наиболее часто используемая форма:
istream& get (char& ch);
Для посимвольного (побайтового) вывода предназначен метод put:
ostream& put (char ch);
Метод get, имеющий один параметр, читает один символ (байт) из входного потока в переменную ch. При выполнении этих методов символы-разделители (пробелы, табуляции, переход на новую строку) не пропускаются, а читаются так же, как и другие символы потока.
Метод put, имеющий один параметр, выводит в выходной поток один символ (байт) – значение переменной ch.
ofstream f6("d:\\test.txt");
char c1;
сin.get(c1); // чтение символа с клавиатуры в переменную c1
f6.put(c1); // вывод значения символьной переменной c1 в выходной поток f6
Есть еще несколько форм метода get, например:
istream& get (char *buf, streamsize num);
istream& get (char *buf, streamsize num, char delim);
int get();
где streamsize – разновидность типа int. Первые две из этих форм get позволяют читать из входного потока в область ввода, адресуемую указателем buf, несколько (до num-1 или до конца файла) символов за одно обращение. Окончание ввода вызывает также обнаружение символа перехода на новую строку (кода клавиши "Enter") – для первой формы, и символа delim – для второй. Эти символы из входного потока не извлекаются, они остаются в потоке до выполнения следующей операции ввода. После прочитанных в область ввода buf символов первая и вторая формы метода get записывают завершающий строку нулевой символ.
Третья форма метода get читает из входного потока очередной символ, если при этом обнаруживается конец файла, то возвращаемым значением является признак конца файла – константа EOF, представляющая собой целое отрицательное число.
Отметим, что в отличие от ввода символов с помощью операции >>, при использовании метода get пробельные символы воспринимаются как обычные символы, а не как разделители.
2.4.5.2.Метод getline
Для ввода строк предусмотрен также метод getline, имеющий две формы – с двумя и тремя параметрами.
istream& getline (char *buf, streamsize num);
istream& getline (char *buf, streamsize num, char delim);
где streamsize – разновидность типа int. Первый параметр – это адрес области памяти для ввода данных, второй – увеличенное на 1 максимальное число вводимых символов, возможный третий – символ-ограничитель, ввод которого прекращает чтение вне зависимости от числа введенных символов. Метод getline считывает символы из входного потока в область ввода, адресуемую указателем buf, до тех пор, пока их число не достигнет num-1 или не встретится конец файла. Кроме того, прекращение чтения для первой формы вызывает символ перехода на новую строку (код клавиши "Enter" ('\n' или '\xA'), а для второй формы – символ, указанный в списке фактических параметров в качестве delim. Эти символы извлекаются из входного потока, но в область ввода не записываются. После прочитанных в область ввода buf символов обе формы метода getline записывают завершающий строку нулевой символ.
Легко заметить сходство метода функции getline с методом get, имеющим несколько параметров. Различие их состоит в том, что getline удаляет из входного потока символ перехода на новую строку (код клавиши "Enter"), а get, как и операция >>, – нет.
