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



Pdf көрінісі
бет194/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   190   191   192   193   194   195   196   197   ...   256
10.4.1.4 Вывод целых 
Прием задания нового значения множества флагов с помощью операции | и функций flags() и setf() 
работает только тогда, когда один бит определяет значение флага. Не такая ситуация при задании 
системы счисления целых или вида выдачи вещественных. Здесь значение, определяющее вид 
выдачи, нельзя задать одним битом или комбинацией отдельных битов. 
Решение, принятое в , сводится к использованию версии функции setf(), работающей со 
вторым "псевдопараметром", который показывает какой именно флаг мы хотим добавить к новому 
значению. 
Поэтому обращения 
cout.setf(ios::oct,ios::basefield); // восьмеричное 
cout.setf(ios::dec,ios::basefield); // 
десятичное 
cout.setf(ios::hex,ios::basefield); // 
шестнадцатеричное 
установят систему счисления, не затрагивая других компонентов состояния потока. Если система 
счисления установлена, она используется до явной переустановки, поэтому 
cout << 1234 << ' '; 
// десятичное по умолчанию 
cout << 1234 << ' '; 
cout.setf(ios::oct,ios::basefield); // 
восьмеричное 
cout << 1234 << ' '; 
cout << 1234 << ' '; 
cout.setf(ios::hex,ios::basefield); // 
шестнадцатеричное 
cout << 1234 << ' '; 
cout << 1234 << ' '; 
напечатает 


Бьерн Страуструп.
Язык программирования С++ 
 
270 
1234 1234 2322 2322 4d2 4d2 
Если появится необходимость указывать систему счисления для каждого выдаваемого числа, следует 
установить флаг showbase. Поэтому, добавив перед приведенными выше обращениями 
cout.setf(ios::showbase); 
мы получим 
1234 1234 02322 02322 0x4d2 0x4d2 
Стандартные манипуляторы, приведенные в $$10.4.2.1, предлагают более элегантный способ 
определения системы счисления при выводе целых. 
10.4.1.5 Выравнивание полей 
С помощью обращений к setf() можно управлять расположением символов в пределах поля: 
cout.setf(ios::left,ios::adjustfield); // 
влево 
cout.setf(ios::right,ios::adjustfield); // 
вправо 
cout.setf(ios::internal,ios::adjustfield); // 
внутреннее 
Будет установлено выравнивание в поле вывода, определяемом функцией ios::width(), причем не 
затрагивая других компонентов состояния потока. 
Выравнивание можно задать следующим образом: 
cout.width(4); 
cout << '(' << -12 << ")\n"; 
cout.width(4); 
cout.setf(ios::left,ios::adjustfield); 
cout << '(' << -12 << ")\n"; 
cout.width(4); 
cout.setf(ios::internal,ios::adjustfield); 
cout << '(' << -12 << "\n"; 
что выдаст 
( -12) 
(-12 ) 
(- 12) 
Если установлен флаг выравнивания internal (внутренний), то символы добавляются между знаком и 
величиной. Как видно, стандартным является выравнивание вправо. 


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




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

    Басты бет