Главная » Просмотр файлов » Г. Шилтд - Самоучитель C++ (PDF)

Г. Шилтд - Самоучитель C++ (PDF) (1114887), страница 36

Файл №1114887 Г. Шилтд - Самоучитель C++ (PDF) (Г. Шилтд - Самоучитель C++ (PDF)) 36 страницаГ. Шилтд - Самоучитель C++ (PDF) (1114887) страница 362019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 36)

Однако основание системы счисления можно поменять. Установка флагаoct ведет к тому, что вывод будет осуществляться в восьмеричной системесчисления, а установка флага hex — в шестнадцатеричной. Чтобы вернутьсяк десятичной системе счисления, установите флаг dec.Установка флага showbase ведет к выводу основания системы счисления.Например, шестнадцатеричное значение IF с этим флагом будет выводитьсякак Ox IF.По умолчанию при выводе значений в научной нотации символ "е" выводится в нижнем регистре.

Кроме этого, при выводе шестнадцатеричногозначения символ "х" тоже выводится в нижнем регистре. При установкефлага uppercase, эти символы выводятся в верхнем регистре.Установка флага showpos приводит к выводу знака + перед положительнымизначениями.Установка флага showpoint ведет к появлению десятичной точки и последующих нулей при выводе любых значений с плавающей точкой.При установке флага scientific числа с плавающей точкой выводятся в научной нотации.

При установке флага fixed числа с плавающей точкой выводятся в обычной нотации. Если ни один из этих флагов не установлен,компилятор сам выбирает подходящий способ вывода.Если установлен флаг umtbuf, то буфер очищается (flush) после каждой операции вставки (insertion operation).При установленном флаге boolalpha значения булева типа выводятся в видеключевых слов true и false.Одновременно на все поля, определенные с флагами oct, dec и hex, можносослаться с помощью флага basefield.

Аналогично на поля, определенные сфлагами left, right и internal, можно сослаться с помощью флага adjust field Инаконец, на поля с флагами scientific и fixed можно сослаться с помощьюфлага floatfield.Для установки флага формата пользуйтесь функцией setf(). Эта функцияявляется членом класса ios. Здесь показана ее основная форма:fratflags setf(fmtflagsфлаги);Эта функция возвращает предыдущие установки флагов формата и устанавливает новые, заданные значением флаги.

(Значения всех остальных флаговне изменяются.) Например, для установки флага showpos можно воспользоваться следующей инструкцией:лотох_ввода/вывода.setf{ios::showpos);Здесь поток ввода/вывода ~ это тот поток, на который вы хотите повлиять.Обратите внимание на использование оператора расширения области види-246Самоучительмости.

Запомните, флаг showpos — это перечислимая константа внутрикласса ios. Следовательно, чтобы сообщить компилятору об этом, необходимо поставить перед флагом showpos имя класса и оператор расширения области видимости. Если этого не сделать, константа showpos просто не будетраспознана компилятором.Важно понимать, что функция setf() является членом класса ios и влияет насозданные этим классом потоки ввода/вывода.

Поэтому любой вызов функции setfQ делается относительно конкретного потока. Нельзя вызвать функцию setf() саму по себе. Другими словами, в C++ нет понятия глобальногосостояния формата. Каждый поток ввода/вывода поддерживает собственнуюинформацию о состоянии формата.Вместо повторных вызовов функции setfQ в одном вызове можно установить сразу несколько флагов. Для объединения необходимых флагов используйте оператор OR. Например, в следующем вызове функции setf() дляпотока cout устанавливаются флаги showbase и hex;cout,setf(ios::showbase I ios::hex);Поскольку флаги формата определяются внутри класса ios, доступ к нимдолжен осуществляться через класс ios и оператор расширения области видимости. Например, сам по себе флаг showbase задать нельзя, необходимонаписать ios::showbase.Дополнением setfQ является функция unsetfQ.

Эта функция-член класса iosсбрасывает один или несколько флагов формата. Здесь показана ее основнаяформа:void unsetf(fmtflagsфлаги);Флаги, заданные параметром флаги, сбрасываются. (Все остальные флагиостаются без изменений.)Когда-нибудь вам понадобится только узнать текущее состояние флагов ипри этом ничего не менять. Поскольку функции setf() и unsetf() меняют состояние одного или более флагов, в класс ios включена функция-членflags(), которая просто возвращает текущее состояние флагов формата. Здесьпоказан прототип этой функции:fmtflags flags();Функция flags() имеет и вторую форму, которая позволяет установить все,связанные с потоком ввода/вывода, флаги формата.

Флаги задаются в аргументе функции flags(). Здесь показан прототип этой версии функции:fmtflags flags(fmtflags t) ;Глава 8. Введение в систему ввода/вывода C++247При использовании этой версии функции flags() битовый шаблон/копируется в переменную для хранения связанных с потоком флагов формата; приэтом перезаписывается весь предшествующий набор флагов. Функция возвращает предыдущие установки флагов формата.1.

В этом примере показано, как установить несколько флагов формата.^include <iostream>using namespace std;intmainf)I// вывод с использованием установок по умолчаниюcout « 123.23 « " привет " « 100 « '\п' ;cout « 10 «' ' « -10 « '\п';cout « 100.0 « '\п';// теперь меняем форматcout.unsetf(ios::dec); // требуется не для всех компиляторовcout,setf{ios::hex \ ios::scientific);cout « 123.23 « " привет " « 100 « '\n';cout.setf(ios::showpos);cout « 10 «' ' « -10 « '\n';cout.setf(ios::showpoint \ ios::fixed);cout « 100.0;return 0;}После выполнения программы на экран выводится следующее:123.23 привет 10010 -101001.232300е+02 привет 64a fffffff6+100.000000Обратите внимание, что флаг showpos влияет только на вывод десятичныхзначений. Он не влияет на число 10, когда оно выводится в шестнадцатеричной системе счисления.

Кроме того, отметьте, что вызов функции unsetfQприводит к сбросу установленного по умолчанию флага dec. Этот вызов нужен не для всех компиляторов, а только для некоторых, для которых уста-248_СамоучительC++новка флага dec автоматически приводит к сбросу остальных флагов. Поэтому после сброса флага dec необходимо заново установить флаг hex или oct.Как правило, для лучшей переносимости программ лучше установить толькото основание системы счисления, которое вы будете использовать и стеретьостальные.2.

В следующей программе показано действие флага uppercase. В первую очередь устанавливаются флаги uppercase, showbase и hex. Затем выводится число 88 в шестнадцатеричной системе счисления. В этом случае символшестнадцатеричной системы счисления "X" выводится в верхнем регистре.Далее с помощью функции imsetf() сбрасывается флаг uppercase и снова выводится шестнадцатеричное число 88.

Теперь символ "х" оказывается в нижнем регистре.^include <iostream>using namespace std;int main ( )trcout .unset f (ios: :dec) ;cout .setffios: : uppercase | ios: ishowbase | ios::hex);rcout « 88 « \n';cout. unsetf (ios: : uppercase) ;cout « B8 « '\n';return 0;3. В следующей программе для вывода состояния флагов формата потока coutиспользуется функция flagsQ. Обратите особое внимание на функциюshowflags(). Она может вам пригодиться при разработке собственных программ.^include <iostream>using namespace std;void showf lags ( ) ;int main { ){// отображение состояния флагов формата по умолчаниюshowf lags () ;cout. setf (ios: :oct I ios: : showbase I ios: : fixed) ;showf lags () ;return 0;Глава_В. Введение в систему ввода/вывода C++// Эта функция выводит состояние флагов форматаvoid showflags(){ios::fmtflags f;f = cout.flags(); // получение установок флагов форматаif(f & ios::skipws) cout « "skipws установленХп";else cout « "skipws сброшен\n";if(f & ios::left} cout « "left установленХп";else cout « "left сброшен\п";if(f & ios::right) cout « "right установленХп";else cout « "right сброшенХп";if(f & ios::internal) cout « "internal установленХп";else cout « "internal сброшенХп";if(f & ios::dec) cout « "dec установленХп";else cout « "dec сброшенХп";if(f & ios::oct) cout « "oct установленХп";else cout « "oct сброшенХп";if(f & ios::hex) cout « "hex установленХп";else cout « "hex сброшен\п";if(f & ios::showbase) cout « "showbase установленХп";else cout « "showbase сброшенХп";if(f & ios::showpoint) cout « "showpoint установленХп";else cout « "showpoint сброшенХп";if (f & ios::showpos) cout « "showpos установленХп";else cout « "showpos сброшенХп";if(f £ ios::uppercase) cout « "uppercase установленХп";else cout « "uppercase сброшенХп";if(f & ios:scientific) cout « "scientific установленХп";else cout « "scientific сброшенХп";if(f & ios::fixed) cout « "fixed установленХп";else cout « "fixed сброшенХп";if (f & ios::unitbuf) cout « "unitbuf установленХп";else cout « "unitbuf сброшенХп";if(f & ios:iboolalpha) cout « "boolalpha установленХп";else cout « "boolalpha сброшенХп";cout « "Xn";249250Самоучитель C++В функции showflagsQ объявляется локальная переменная f типа fmtflags.

Если в вашем компиляторе тип данных fmtflags не определен, объявите переменную f типа long. Ниже показан результат выполнения программы:skipws установленleft сброшенright сброшенinternal сброшенdec установленoct сброшенhex сброшенshowbase сброшенshowpoint сброшенshowpos сброшенuppercase сброшенscientific сброшенfixed сброшенunitbuf сброшенboolalpha сброшенskipws установленl e f t сброшенright сброшенinternal сброшенdec установленoct установленhex сброшенshowbase установленshowpoint сброшенshowpos сброшенuppercase сброшенscientific сброшенfixed установленunitbuf сброшенboolalpha сброшен4.

В следующей программе проиллюстрирована работа второй версии функцииflags()- Сначала, устанавливая флаги showpos, showbase, oct и right, мы строиммаску флагов. Затем с помощью функции flags() для потока cout маска связывается с переменной флагов. С помощью функции showflagsQ проверяетсяправильность установки флагов. (Это та же функция, которая использоваласьв предыдущей программе.)^include <iostream>using namespace std;void showflagsf);Глава 8. Введение в систему ввода/вывода C++int2_5_1_mainf){// отображение состояния флагов формата по умолчаниюshowf lags () ;// устанавливаются флаги showpos, showbase, cct и right;// остальные сбрасываютсяios:ifmtflags f - ios::showpos | ios::showbase |ios:: oct I ios::right;cout.flags(f); // установка флаговshowflags();return 0;Упражнения!IfiHUfl]1.

Напишите программу, которая бы устанавливала флаги для потока cout так,чтобы целые, если они положительны, выводились со знаком +. Покажите,что ваш набор флагов формата правилен.2. Напишите программу, которая бы устанавливала флаги для потока cout так,чтобы всегда при выводе дробных значений были показаны десятичные точки. Кроме этого, значения с плавающей точкой должны выводиться в научной нотации с символом "Е" в верхнем регистре.3.

Характеристики

Тип файла
PDF-файл
Размер
65,55 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее