Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
студ
0 / 0 / 0
Регистрация: 05.09.2014
Сообщений: 61
#1

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

08.05.2015, 01:44. Просмотров 401. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отличие форматирующих функций, флагов, манипуляторов (C++):

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

Отличие функций [объясните] - C++
ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen));...

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

Функции работы со строками, отличие функций с добавлением _s - C++
При работе с строками в VS 2012, увидел от него предупреждение при использовании функций gets(), strcat() и др. Ругается что они являются...

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

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

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

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

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

Эмуляция регистра флагов - C++
Сразу к делу. Самый банальный способ: unsigned char flags; bool get_flag(int num) { return (flags &amp; (1 &lt;&lt; num)); } void...

cout сброс флагов - C++
Подскажите. Как сбросить флаги cout ? А именно, нужно чтоб cout&lt;&lt;fixed; прекратил свое действие

Установка флагов форматирования - C++
Добрый день, чем отличаются эти две строки? cout &lt;&lt; setw(10) &lt;&lt; setiosflags(ios::left) &lt;&lt; &quot;Привет&quot; &lt;&lt; endl; и cout &lt;&lt; setw(10) &lt;&lt;...


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

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

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