Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет191/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   187   188   189   190   191   192   193   194   ...   256
10.4.1 Класс ios 
Большинство средств управления вводом-выводом сосредоточены в классе ios, который является 
базовым для ostream и istream. По сути здесь находится управление связью между istream или ostream 
и буфером, используемым для операций ввода-вывода. Именно класс ios контролирует: как символы 
попадают в буфер и как они выбираются оттуда. Так, в классе ios есть член, содержащий информацию 
об используемой при чтении или записи целых чисел системы счисления (десятичная, восьмеричная 
или шестнадцатеричная), о точности вещественных чисел и т.п., а также функции для проверки и 
установки значений переменных, управляющих потоком. 
class ios { 
//... 
public: 
ostream* 
tie(ostream* 
s); 
// 
связать input и output 
ostream* 
tie(); 
// 
возвратить "tie" 
int 
width(int 
w); 
// 
установить поле width 
int 
width() 
const; 
char 
fill(char); 
// установить символ заполнения 
char 
fill() 
const; 
// вернуть символ заполнения 
long 
flags(long 
f); 
long 
flags() 
const; 
long setf(long setbits, long field); 
long 
setf(long); 
long 
unsetf(long); 
int 
precision(int); 
// установить точность для float 
int 
precision() 
const; 
int 
rdstate(); 
const; 
// состояния потоков, см. $$10.3.2 
int 
eof() 
const; 
int 
fail() 
const; 
int 
bad() 
const; 
int 
good() 
const; 
void 
clear(int 
i=0); 
//... 
}; 
В 10.3.2 описаны функции, работающие с состоянием потока, остальные приведены ниже. 
10.4.1.1 Связывание потоков 
Функция tie() может установить и разорвать связь между ostream и istream. Рассмотрим пример: 
main() 

String 
s; 
cout << "Password: "; 
cin >> s; 
// 
... 

Как можно гарантировать, что приглашение Password: появится на экране прежде, чем выполниться 
операция чтения? Вывод в cout и ввод из cin буферизуются, причем независимо, поэтому Password: 
появится только по завершении программы, когда закроется буфер вывода. 


Бьерн Страуструп.
Язык программирования С++ 
 
267 
Решение состоит в том, чтобы связать cout и cin с помощью операции cin.tie(cout). Если ostream связан 
с потоком istream, то буфер вывода выдается при каждой операции ввода над istream. Тогда операции 
cout << "Password: "; 
cin >> s; 
эквивалентны 
cout << "Password: "; 
cout.flush(); 
cin >> s; 
Обращение is.tie(0) разрывает связь между потоком is и потоком, с которым он был связан, если такой 
был. Подобно другим потоковым функциям, устанавливающим определенное значение, tie(s) 
возвращает предыдущее значение, т.е. значение связанного потока перед обращением или 0. Вызов 
без параметра tie() возвращает текущее значение. 


Достарыңызбен бөлісу:
1   ...   187   188   189   190   191   192   193   194   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет