|
Программирование >> Структурное программирование
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 сбрасывает указанные флаги и возвращает значения этих флагов, которые существовали ранее.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |