Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
студ
0 / 0 / 1
Регистрация: 05.09.2014
Сообщений: 67
1

Отличие форматирующих функций, флагов, манипуляторов

08.05.2015, 01:44. Просмотров 485. Ответов 2
Метки нет (Все метки)

Изучал форматный ввод и когда уже начал думать, что понимаю его, столкнулся с тем, что мне не понятно - зачем используются три вида форматирования?

Вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <iostream>
#include <iomanip>
#include <fstream>
 
using namespace std;
 
int main()
{
    cerr.fill('0');
    cerr.width (20) ;
    cout.setf(ios::adjustfield, ios::left);
    int t=16;
  cerr << oct << t << hex << endl;
  cerr << oct << t << hex << endl;
  cerr << t << endl; 
  cout << setw(9) << t << endl; 
  cerr << oct << setw(9) << setfill('*') << t << hex << endl;
  cerr << oct << setfill('*') << t << endl;
   return 0;
}
а вот результат:
00000000000000000020
20
10
16
*******20
20

Мне казалось что манипуляторы, например, имеют область действия в рамках одной печати (то есть если мы прерываем цепочку, то следующая цепоска идет с параметрами по умолчанию).
А получается, то "heх", установленный при печати строки 2 повлиял на формат вывода строки 3 и таким и останется пока не будет изменен.
При этом две одинаковые строчки печати строк 1 и 2 дали разные результаты - во второй строчке прекратили действие функции cerr.fill('0'); и cerr.width (20) ;

В общем попытался найти и не смог - где область действия функций, флагов и манируляторов? Зачем все же их три типа, ведь хоть чем-то кроме как везде пишут удобства они должны принципиально отличаться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2015, 01:44
Ответы с готовыми решениями:

Значения флагов-манипуляторов управления вводом/выводом.
Почему отличаются значения флагов-манипуляторов управления вводом/выводом,...

Отличие функций [объясните]
ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, ...

Какое отличие в работе двух этих функций?
Никак не могу понять различие в работе функций type&amp; func() и type func()....

Функции работы со строками, отличие функций с добавлением _s
При работе с строками в VS 2012, увидел от него предупреждение при...

Создание манипуляторов
Здравствуйте! Задание: создать манипулятор, который будет игнорировать при...

2
Gr1f0nn
242 / 162 / 133
Регистрация: 30.09.2012
Сообщений: 690
08.05.2015, 02:08 2
студ, У Г.Шилдта (Самоучитель С++. 3-е издание) неплохо описаны как раз такие тонкости работы манипуляторов и флагов.

По умолчанию числовые значения выводятся в десятичной системе счисления. Однако основание системы счисления можно поменять. Установка флага
oct ведет к тому, что вывод будет осуществляться в восьмеричной системе
счисления, а установка флага hex — в шестнадцатеричной. Чтобы вернуться
к десятичной системе счисления, установите флаг dec.
Флаги, заданные форматом флаги, сбрасываются
В некоторых компиляторах при выполнении каждой операции вывода значение ширины поля возвращается к
своему состоянию по умолчанию, поэтому перед каждой инструкцией вывода может понадобиться устанавливать минимальную ширину поля.
Поэтому лучше всего будет почитать обо всех манипуляторах и флагах, если не отдельно о каждом, то обо всех в целом с учетом общих тонкостей, коих, как оказалось, немало
1
студ
0 / 0 / 1
Регистрация: 05.09.2014
Сообщений: 67
08.05.2015, 03:30  [ТС] 3
Спасибо, Шилдта читал, но как раз и не понял есть ли глобальные отличия, мне показалось, что слишком много одинакового, а вот принципиальных отличий не нашел! Но понимаю что должны быть отличия, ведь не просто же так разработчики сделали разные варианты, так сказать на любой вкус, кому как нравится...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2015, 03:30

Использование потоковых манипуляторов в методах класса
Здравствуйте! Скажите, пожалуйста, почему не работают манипуляторы? ...

использование флагов
Объясните, пожалуйста , как задавать флаги . Например я хочу чтоб при вызове...

Использование флагов
Ребят, есть такая задачка Проверить какие флаги потока вывода установлены и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru