Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
vxg
Модератор
 Аватар для vxg
2857 / 1790 / 181
Регистрация: 13.01.2012
Сообщений: 6,738
#1

Сбрасывается форматирование std::stringstream при очистке потока - C++

27.06.2014, 15:01. Просмотров 638. Ответов 8
Метки нет (Все метки)

Имеем объект класса std::stringstream используемый для форматированного вывода. Перед очередным выводом производится очистка потока. После очистки все форматирование сбрасывается. Как бы узнать - нормально ли это? Borland C++ Builder 6 (если это влияет).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    std::stringstream ss;
    ss.width(2);
    ss.setf(std::ios::right, std::ios::adjustfield);
    ss.fill('0');
 
    ss << 1;
    std::string s = ss.str(); //01 - ok
 
    ss.str("");
    ss.clear();
 
    ss << 1;
    s = ss.str(); //1 - за что?! где мои ширина, выравнивание и символ заполнитель???
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
27.06.2014, 17:34     Сбрасывается форматирование std::stringstream при очистке потока #2
vxg, Сбрасывает не clear, а str(""). Что вцелом, логично, однако подтверждение стоит поискать в стандарте.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.06.2014, 21:55     Сбрасывается форматирование std::stringstream при очистке потока #3
Цитата Сообщение от vxg Посмотреть сообщение
Borland C++ Builder 6 (если это влияет).
Можно только посочувствовать.
Цитата Сообщение от vxg Посмотреть сообщение
После очистки все форматирование сбрасывается.
Не все. И не сбрасывается. Надо просто ширину задать по новой, т.к. она влияет только на следующее выводимое значение. О чем написано например тут:
Width of the next formatted element to insert.
vxg
Модератор
 Аватар для vxg
2857 / 1790 / 181
Регистрация: 13.01.2012
Сообщений: 6,738
30.06.2014, 09:47  [ТС]     Сбрасывается форматирование std::stringstream при очистке потока #4
Цитата Сообщение от ForEveR Посмотреть сообщение
Сбрасывает не clear, а str(""). Что вцелом, логично, однако подтверждение стоит поискать в стандарте
к ужасу выяснено, что сбрасывает просто первый же вывод.
Цитата Сообщение от Tulosba Посмотреть сообщение
Можно только посочувствовать.
ой, ай, вот если бы в других средах этого не было тогда "буэ" было бы уместно. среда озвучена не для "да он на велосипеде, ахаха", а для "да, в той версии компилятора есть отклонения" - чего как мы видим нет
Цитата Сообщение от Tulosba Посмотреть сообщение
О чем написано
в том то и дело что не нашел там такого. точнее это действительно написано в шапке, но, если я верно понимаю работу класса (откашливается и поправляет галстук), то такое поведение - маразм. зачем после каждого вывода сбрасывать ширину? я ведь задал ее не манипулятором. и если она каждый раз сбрасывается как ее задать на веки вечные? что бы она возвращалась при вызове width()?
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
30.06.2014, 11:06     Сбрасывается форматирование std::stringstream при очистке потока #5
Цитата Сообщение от vxg Посмотреть сообщение
зачем после каждого вывода сбрасывать ширину?
Суть в том, что некоторые стандартные функции гарантированно вызывают width(0), поэтому установку ширины распространили только на ближайший аргумент, чтобы не было недоразумений.
Ответ нашел тут: http://stackoverflow.com/a/1533752/3240681
vxg
Модератор
 Аватар для vxg
2857 / 1790 / 181
Регистрация: 13.01.2012
Сообщений: 6,738
30.06.2014, 11:10  [ТС]     Сбрасывается форматирование std::stringstream при очистке потока #6
печально
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
30.06.2014, 11:52     Сбрасывается форматирование std::stringstream при очистке потока #7
Цитата Сообщение от vxg Посмотреть сообщение
печально
Ну, я думаю, не так страшно (сложно) добавить вызов width(N) перед каждым выводом.
vxg
Модератор
 Аватар для vxg
2857 / 1790 / 181
Регистрация: 13.01.2012
Сообщений: 6,738
30.06.2014, 12:58  [ТС]     Сбрасывается форматирование std::stringstream при очистке потока #8
просто предполагалось что человек настроит поток как ему надо работая непосредственно с потоком и все эти настройки будут применяться к выводу. а теперь придется все эти настройки выносить в поля обертки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2014, 14:03     Сбрасывается форматирование std::stringstream при очистке потока
Еще ссылки по теме:

Std::thread приостановка потока C++
Не корректно работает вывод из потока stringstream C++
C++ Очистить поток std::stringstream
C++ Ошибка при очистке памяти
C++ Присоединение потока std::thread

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
30.06.2014, 14:03     Сбрасывается форматирование std::stringstream при очистке потока #9
Цитата Сообщение от vxg Посмотреть сообщение
предполагалось что человек настроит поток как ему надо
Я бы тут наверное предложил создать (наследовать от стандартного) свой поток с блекджеком и шлюхами Но совсем недавно выяснил некоторые подробности, поэтому не буду уже такого предлагать со 100% уверенностью.
Yandex
Объявления
30.06.2014, 14:03     Сбрасывается форматирование std::stringstream при очистке потока
Ответ Создать тему
Опции темы

Текущее время: 21:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru