Программирование >>  Расширенная версия языка c++ 

1 ... 91 92 93 [ 94 ] 95 96 97 ... 227


9.4. Дополнительная информация о функциях двоичного ввода/вывода

Кроме представленной ранее формы, функцию get() можно перегрузить

несколькими способами. Здесь показаны прототипы трех наиболее часто перегружаемых форм:

istream flget(char *буфер, streainsize чйсло байт) ; istream flget (char *буфвр, strearasize чясло байт,

char ограничителе.) ;

int get О ;

Первая функция get() считывает символы в массив, определенный указателем буфер, до тех пор, пока либо не считано столько символов, сколько задано параметров о йййт 1. либо не встретился символ конца файла. В конце массива, заданного указателем буфер, функция get() помещает ноль. Если в потоке ввода встретится символ новой строки, он не извлекается, а остается в потоке до следующей операции ввода.

Вторая функция get() считывает символы в массив, определенный указателем буфер, до тех пор, пока либо не считано столько символов, сколько задано параметром число иаит - 1, либо не встретился символ, заданный параметром ограничитель, либо не встретился символ конца файла. В конце массива, заданного указателем буфер, функция get() помешает ноль. Если в потоке ввода встретится символ <:ршшчитеАЬ, он не извлекается, а остается в потоке до следующей операции ввода.

Третья функция get() возвращает из потока следующий символ. Она возвращает символ L.Oi , если достигнут конец файла. Эта форма функции get() напоминает функцию getc() языка С.

2. Дан следующий класс. Напишите программу для вывода содержимого класса в файл. Для этой цели создайте пользовательскую функцию вывода. .. ,

class account { ma-iV - .i-.

int custnum; char naine [80] ; double balance; public:

account(int c, char *n, double b) {

custnum = c; strcpy(name, n);

balance = b; } ..... -..г.-

здесь нужна пользовательская функция вывода



Другой функцией для реализации ввода является функции ine(). Эта функция - член всех потоковых классов ввода. Ниже показаны ее прототипы:

istxeam figetline(char *6уфер, streamsize число 6аЛт) ; i-

istream tgetline(char *буфер, streamsiKe 4nano 6axw,

char orpaauvuv&nb) ;

Первая функция считывает символы в массив, обозначенный указателем буфер, до тех пор, пока либо не считано столько символов, сколько задано параметром число 6айт - 1, либо не встретился символ новой строки, либо не встретился символ конца файла. В конце массива, заданного указателем буфер, функция getline() помещает ноль. Если в потоке ввода встретится символ новой строки, он извлекается, но не помещается в массив.

Вторая функция считхвает символе! в массив, обозначеннхй указателем буфер, до тех пор, пока либо не считано столько символов, сколько задано параметром число байт - 1, либо не встретился символ ограничитель, либо не встретился символ конца файла. В конце массива, заданного указателем буфер, функции ine О помещает ноль. Если в потоке ввода встретится символ ограничитель, он извлекается, но не помещается в массив.

Как можно заметить, обе версии функции getline() фактически тождественны версиям це1(буфер, число байт) и еЦбуфер, число байт, ограничитель) функции get(). Обе считывают символы из потока ввода и помещают их в массив, обозначенный указателем буфер до тех пор, пока либо не считано число байт - 1 символов, либо не встретился символ ограничитель или символ конца файла. Отличие между функциями get() и getiine() в том, что функция getlmeO считывает и удаляет из потока ввода символ ограничитель, а функция get() - нет.

Используя функцию peek(), можно получить следующий символ из потока ввода без его удаления из потока. Функция является членом потоковых классов ввода и имеет следующий прототип:

int реек о ; - \Г *.

Функция возвращает следующий символ из потока или, если достигнут конец файла, символ EOF.

С помощью функции аск(), являющейся членом потоковых классов

ввода, можно возвратить последний считанный из потока символ обратно в

поток. Ниже показан прототип этой функции: istream fiputback (char с) ;

Здесь с - это последний считанный из потока символ.

При выполнении вывода данные не сразу записываются на связанное с

потоком физическое устройство, а информация временно сохраняется во

внутреннем буфере. Только после заполнения буфера его содержимое переписывается на диск. Однако вызов функции flush() вызывает физическую



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

ostream fiflushO

Вызовы функции flush() оправданы при работе в неблагоприятной обстановке (например, в ситуациях, когда часто случаются сбои по питанию).

1. Как вы знаете, при использовании для считывания строки оператора >>, считывание прекращается при встрече первого разделительного символа. При наличии в строке пробелов такое считывание становится невозможным.

как показано в программе, с помощью функции можно ре-

шить эту проблему: . , ., ...

Использование функции ine О для считывания строки с пробелами #include <iostream>

ftinclude <fstreain> ... ......

using namespace std; . -

int main () {

char str [80]; .

cou< Введите мше имя: ; . .

cin.getline (str, 79); - - ; > y.

cou str \n;

return 0; . \, j

В данном случае ограничителем для функции getline() является символ новой строки. Это делает выполнение функции getluie() очень похожей на выполнение стандартной функции gets().

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

трация работы функции реекГ) : -

ttinclude <iostreai!i> ttinclude

#include <cctype> l.J---

using namespace std;

int main () ,



1 ... 91 92 93 [ 94 ] 95 96 97 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика