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

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

Войти
Регистрация
Восстановить пароль
 
thick_int
Заблокирован
#1

Залипающие манипуляторы - C++

17.11.2011, 08:17. Просмотров 902. Ответов 6
Метки нет (Все метки)

У меня следующий вопрос. До каких пор эти манипуляторы (например setfill) залипают?
Имеется в виду следующее. Допустим я в некоторой функции воспользовался одним из таких залипающих манипуляторов. Функция завершилась. А вот теперь продолжится ли залипание или на этом конец.
Грубо говоря, какова область залипания этих манипуляторов?

Заодно, если можно поясните плиз, вот этот объекты cout и cin они как бы одни единственные на всю прораммму или у каждой функции свой?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2011, 08:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Залипающие манипуляторы (C++):

Залипающие - C++
Дословная цитата из книги Дейтла "Как программировать на C++", стр. 597. "Для каждой залипающей установки (такой, как символ заполнения...

Можно ли сделать залипающие кнопки в WTL без переписывания класса CButton? - C++
.

Манипуляторы. От С к С++ - C++
fprintf(f1, “%-7.3е”, x) Какая эквивалентная запись этой на С++?

Манипуляторы - C++
Ребята, проблема с манипуляторами.. Вместо того чтобы были пустые места, программа выдает нули(( void view(HANDLE hrFile) { ...

Манипуляторы в С++ - C++
___________________Манипуляторы______________________ - endl_________________перевод строки - flush________________выгружает содержимое...

манипуляторы - C++
Создайте свои манипуляторы которые будут выполнять 1)вывод всех символов равных заданному заменить пробелом 2)вывод всех символов...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
17.11.2011, 10:30 #2
Насколько знаю залипающие манипуляторы нужно сбрасывать после использования.

Добавлено через 34 секунды
Вот даже у Дейтелов нашел
Для каждой залипающей установки (такой, как символ заполнения
или точность значений с плавающей точкой) следует
восстанавливать ее предыдущее значение, когда она более не нужна. Если этого не
сделать, последующий вывод программы может оказаться
форматированным неверно.


Добавлено через 2 минуты
И вот
Манипулятор потока setfill является «залипающей» установкой, т.е. как только
символ заполнения специфицирован, он будет относиться ко всем последующим
выводимым полям.
0
thick_int
Заблокирован
17.11.2011, 11:34  [ТС] #3
Вот я этот же самый кусок читаю, проверяяю и все не совсем так.
То есть все это так, но только в пределах одной функции, на первый взглядтак кажется.
То есть, если я вызываю функцию и в этой вызванной функции использую залипающий манипулятор, то вот как кажется, область его действия - это вызванная функция (если далее не трогать его), а вернувшись из нее все становится,какбыло в вызвавшей функции. То есть происходит сброс этого манипулятора.
Вот меня и интересует правильно ли я понимаю поведение этой штуки.
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
17.11.2011, 14:37 #4
Только что проверил, даже если это сделать в функции, то после выхода из нее все равно остается установка.
Вот код которым тестировал
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 <iomanip>
 
void test( int );
int main()
{
    int x = 5;
 
    std::cout << std::setw( 10 ) << x << std::endl;
 
    test( x );
 
    std::cout << std::setw( 10 ) << x << std::endl;
 
    std::cout << '\a' << std::endl;
    system( "pause" );
    return 0;
}
void test( int x ) {
    std::cout << std::setfill( '0' ) << std::setw( 10 ) << x << std::endl;
}
И вот что вышло.
0
Миниатюры
Залипающие манипуляторы  
thick_int
Заблокирован
17.11.2011, 14:54  [ТС] #5
А у меня все как раз наоборот.
Вот мой код (кстати из той же главы Дейтла, где рассказывается про классы и в частности про класс Time).
Ну правда у меня выход из функций класса

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int _tmain(int argc, _TCHAR* argv[])
{
    Time t;
    cout << "The initial universal time is ";
    t.printUniversal();
    cout << "\nThe initial standard time is ";
    t.printStandard();
 
    t.setTime(13, 27, 6);
    cout << "\nUniversal time after setTime is ";
    t.printUniversal();
    cout << "\nStandard time after setTime is ";
    t.printStandard();
 
    t.setTime(99, 99, 99);
    cout << "\nUniversal time after invalid setTime is ";
    t.printUniversal();
    cout << "\nStandard time after invalid setTime is ";
    t.printStandard();
 
    int a = 2;
    cout << a;
    cout << endl;
    return 0;
}
Ну а сам этот класс Вам знаком, именно в функциях-членах выставляется этот манипулятор.
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
17.11.2011, 14:59 #6
Неправильная проверка. Нужно написать
C++
1
cout << setw(2) << a;
Вместо
C++
1
cout << a;
Тогда будет видно. Потому что setfill заполняет не занятые поля выводимых данных но зарезервированные ими командой setw. По умолчанию эти поля заполняются пробелами. Так что после использования нужно сбрасывать командой
C++
1
std::cout << std::setfill( ' ' );
1
thick_int
Заблокирован
17.11.2011, 15:14  [ТС] #7
Да, спасибо теперь точно, как у Вас.
А заодно стало понятно и со вторым вопросом.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2011, 15:14
Привет! Вот еще темы с ответами:

манипуляторы - C++
Создайте манипулятор ввода skipcbar(), который, поочередно, то считывает, то пропускает каждые десять символов потока ввода.

Собственные манипуляторы - C++
Не компиллируется программа в DevC++. Написать программу с двумя своими манипуляторами. Один выводит сообщение, другой устанавливает...

Флаги форматирования и манипуляторы - C++
У многих новичков возникают вопросы, как вывести число в таком-то формате, а можно вывести так или так. Чтоб стало более ясно, вот...

Манипуляторы и флаги формата - C++
1.Манипулятор right почемуто не производит вывод по правой стороне. В чем проблема? рис. 1 2.Манипулятор skipws должен отбрасывать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.11.2011, 15:14
Ответ Создать тему
Опции темы

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