Using namespace std;
Int main ()
{
setlocale (0, "");
cout << 255 << endl; //На экране видим 255 -по умолчанию установлен флаг dec
cout.setf (ios :: hex); //Включаем флагhex- хотим видеть на экране ff
cout << 255 << endl; //На экране видим 255- изменений не произошло
system ("Pause");
Return 0;
}
В этом примере установка флага hex не привела ни к каким изменениям. Причиной этого явилось то, что одновременно с установленным флагом hex остался установленным и флаг dec. Для исправления ситуации необходимо сначала отключить флаг dec, а затем уже установить флаг hex:
cout.unsetf (ios :: dec); //Отключаем флагdec
cout.setf (ios :: hex); //Включаем флагhex- хотим видеть на экране ff
cout << 255 << endl; //На экране видим ff- то, что хотели
Среди всех флагов можно выделить три группы, в каждой из которых флаги управляют одной и той же характеристикой ввода / вывода, но являются взаимоисключающими. Флагам каждой из этих групп в классе ios присвоены обобщающие имена:
Группа | Флаги | Обобщающее имя |
Флаги основания систем счисления | dec, oct, hex | basefield |
Флаги выравнивания | left, right, internal | adjustfield |
Флаги формата вещественных значений | scientific, fixed | floatfield |
Обобщающие имена групп удобно использовать для выполнения операции со всеми флагами группы, например, для сброса всех флагов группы:
cout.unsetf (ios ::basefield); //Отключаем флагиdec, oct, hexза один прем
Более того, функцию setfможно использовать с двумя параметрами:
setf (новые флаги, маска)
В этом случае функция setfустанавливает только те флаги, которые одновременно присутствуют и в первом и во втором параметре, а те флаги, которые присутствуют во втором параметре, но отсутствуют в первом, будут сброшены. Это дает возможность отключать и включать флаги за один вызов функции setf. Например, для установки любого флага из группы basefield достаточно использовать всего один оператор:
cout.setf (ios :: hex, ios :: basefield);
Здесь второй параметр содержит три флага: dec, oct, hex. Первый параметр содержит флаг hex. Этот флаг будет установлен, а флаги dec и oct будут сброшены.
В классе cout имеются еще несколько функций управляющих форматом вывода данных. К ним относятся:
· precision - определяет точность представления вещественных значений;
· width - устанавливает ширину поля вывода;
· fill - определяет символ заполнения при выводе данных.
Примеры использования этих функций
Пример 1.
cout.width (10);//Ширина поля вывода 10 позиций
cout << 123 << endl; // На экран выведено 7 пробелов и число 123
cout.fill (‘.’); // Символ заполнения ‘.’
cout.width (10);//Ширина поля вывода 10 позиций
cout << 123 << endl;// На экран выведено …….123
Пример 2
cout.width (10);//Ширина поля вывода 10 позиций
cout.setf (ios :: fixed);//Вывод вещественных значений с фиксированной точкой
cout.precision (3);//Ширина поля вывода 10 позиций
cout << 1.2345 << endl; // На экран выведено 7 пробелов и число 1.234
cout.fill (‘.’); // Символ заполнения ‘.’
cout.width (10);//Ширина поля вывода 10 позиций
cout << 123 << endl;// На экран выведено …….123
Дата добавления: 2019-02-07; просмотров: 267;