Программирование >>  Структурное программирование 

1 ... 218 219 220 [ 221 ] 222 223 224 ... 342


11.7.7. Управление выводом в нижнем и верхнем регистрах

(ios::uppercase)

Флаг ios::uppercase устанавливает вывод в верхнем регистре символов X и Е в шестнадцатеричном и экспоненциальном форматах соответственно (см. рис.11.27). Когда флаг ios::uppercase установлен, все буквы шестнадцатерич-ного формата печатаются в верхнем регистре.

figll 27.cpp

Использование флага ios::uppercase iclude <iostream.h> iclude <iomanip.h>

main()

cout << setiosflags(ios::uppercase)

<< Печать в верхнем регистре чисел в экспоненциальном формате

endl и шестнадцатеричных значений: endl << 4.345el0 endl hex 123456789 endl; return 0;

Печать в верхнем регистре чисел в экспоненциёшьном формате

и шестнадцатеричных эначений:

4.345Е+10

75BCD15

Рис. 11.27. Использование флага ios::uppercase

11.7.8. Установка и сброс флагов формата (flags, setiosflags

и resetiosflags)

Если у функции-элемента flags нет аргумента, то она просто возвращает текущие установки флагов формата в виде значения типа long. Функция-элемент flags с аргументом типа long устанавливает флаги формата, заданные

return 0; }

Отображение в формате по умолчанию: 0.001235 1.946е+09

Отображение в экспоненциальном формате: 1.2345б7е-03 1.94бв+09

Отображение в формате по умолчанию после unsetf: 0.001235 1.94бе+09

Отображение в формате с фиксированной точкой: 0.001235 1946000000

Рис. 11.26. Отображение значений с плавающей запятой в форматах по умолчанию, экспоненциальном и с фиксированной точкой



5..

main () {

int i = 1000;

double d = 0.0947628;

cout << Значение переменной flags равно: .A cout. flags () endl

<< Печать данных типа int и double в исходном формате: endl

/1 i \t d endl endl;

long originalFormat = cout.flags(ios::oct ios::scientific); cout Значение переменной flags равно: i cout. flags 0 endl

<< Печать данных типа int и double в новом формате, endl

заданном с помощью функции-элемента flags: endl i \t d endl endl; cout.flags(originalFormat);

cout << Значение переменной flags равно: cout.flags О endl

<< Повторная печать данных в исходном формате: << endl i \t << d endl;

ff ;urn 0;

Значение переменной flags равно: 1

Печать данных типа int и double в исходном формате: 1000 0.094763

Значение переменной flags равно: 4040 Печать данных типа int и double в новом формате, заданном с помощью функции-элемента flags: 1750 9.47628е-02

.

Значение переменной flags равно: 1 :у- Повторная печать данных в исходном формате: t 1000 0.094763

Рис. 11.28. Применение функции-элемента flags

Функция-элемент setf устанавливает флаги формата, заданные в качестве аргумента, и возвращает прежние установки этих флагов в виде значения типа long, которое можно запомнить как показано ниже:

с помощью аргумента, и возвращает прежние установки флагов. Любые флаги форматов, которые не определены в аргументе для функции-элемента flags, остаются в исходном состоянии. Заметим, что исходные установки флагов каждой системы могут различаться. Программа, приведенная на рис. 11.28, демонстрирует использование функции-элемента flags для установки нового состояния формата и сохранения прежнего его состояния с последующим восстановлением исходных установок форматов.

figll 28.cpp Щ II Демонстрация функции-элемента flags ,. iinclude <iostream.h>



11.8. Состояния ошибок потока

Состояние потока может быть проверено с помощью битов класса ios - базового для классов istream, ostream и iostream, которые мы использовали для ввода-вывода.

Бит eofbit для входного потока автоматически устанавливается, когда встречается признак конца файла. Программа может использовать функцию-элемент eof, чтобы определить, встретился ли в потоке признак конца файла. Вызов

cin.eof()

возвращает true, если в cin встретился признак конца файла, и false в противном случае.

Бит failbit устанавливается для потока, если в потоке происходит ошибка форматирования, но символы не утеряны. Функция-элемент fail определяет, не было ли отказа в операции с потоком; обычно после такой неудачной операции данные можно восстановить.

Бит badbit устанавливается для потока при возникновении ошибки, которая приводит к потере данных. Функция-элемент bad определяет, имела ли операция с потоками такую ошибку. При столь серьезных ошибках данные обычно не восстанавливаются.

Бит goodbit устанавливается для потока, если ни один из битов eofbit, failbit и badbit не установлен.

Функция-элемент good возвращает true, если для данного потока все функции bad, fail и eof должны вернуть false. Операции ввода-вывода можно нормально выполнять только с такими хорошими ( good ) потоками.

Функция-элемент rdstate возвращает состояние ошибки потока. Вызов cout.rdstate, например, вернул бы состояние потока, которое затем могло бы использоваться в операторе switch, который проверял бы ios::eofbit, ios::bad-bit, ios::failbit и ios::goodbit. Но более удобными средствами проверки состояния является использование функций-элементов eof, bad, fail и good. Использование этих функций не требует, чтобы программист оперировал с отдельными битами состояния.

Функция-элемент clear обычно используется для восстановления потока в нормальное состояние (когда функция-элемент good возвращает истину), при котором можно продолжать операции ввода-вывода данного потока. По

long previousFlagSettings =

cout.setf(ios::showpoint ios::showpos);

Функция-элемент setf имеет два аргумента типа long:

cout.setf(ios::left, ios::adjustfield);

Этот оператор сначала очищает бит ios::adjustfield, а затем устанавливает флаг ios::left. Этот вариант флага setf влияет на битовые поля, связанные с ios::basefield (содержит ios::dec, ios::oct и ios::hex), с ios::floatfield (содержит ios::scientific и ios::fixed) и с ios::adjustfield(coдepжит ios::left, ios::right и ios::internal).

Функция-элемент unsetf сбрасывает указанные флаги и возвращает значения этих флагов, которые существовали ранее.



1 ... 218 219 220 [ 221 ] 222 223 224 ... 342

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