Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2010, 09:34   #1
rommster
Пользователь
 
Регистрация: 05.10.2010
Сообщений: 46
По умолчанию Манипулятры setiosflags()

Пытаюсь сделать вывод на экран в виде: слева-число, справа-слово, разделённые многоточием (что-то типа оглавления в книге). Вот код:
Код:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
///////////////////////////////////////////
int main()
{
	const int SIZE = 11;
	string names[SIZE] = {"aa", "bbb", "ccc", "dddd", "eeeee", "ff", "ggg", "hhh", "ii", "j", "kkk"};
	int i;
	
	for(i = 0; i < SIZE; ++i)
	{
		cout << /*resetiosflags(ios::right) <<*/ setfill('.') 
			 << setiosflags(ios::left) << setw(2) << i
			 << setiosflags(ios::right) << setw(20) << names[i] 
			 << endl; 
	}
	
	return 0;
}
Но есть одна проблема: после установки в цикле ios::right, не получается установить обратно ios::left, и выравнивание как числа так и слова производится по правому краю (правильно работает только в самой первой строке). Вот что получается:
sdf.JPG
Помогает resetiosflags(), но не могу понять, почему его приходится использовать? Спасибо за помощь.
rommster вне форума Ответить с цитированием
Старый 25.12.2010, 16:50   #2
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Если откроете страуструпа и прочтете параграф про манипуляторы, то вопросы должны отпасть.
P.S. это не пижонство, я бы с радостью дал конкретный ответ, но не помню. Помню только, что есть какое то предупреждение по этому поводу
coinkrsk вне форума Ответить с цитированием
Старый 25.12.2010, 16:52   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

1. 1 секунд спустя - http://www.google.com/search?q=setiosflags
2. 5 секунд спустя - http://www.cplusplus.com/reference/i...s/setiosflags/
3. 15 секунд спустя - http://www.cplusplus.com/reference/i...resetiosflags/

Последний раз редактировалось BOBAH13; 26.12.2010 в 16:04.
BOBAH13 вне форума Ответить с цитированием
Старый 26.12.2010, 15:41   #4
rommster
Пользователь
 
Регистрация: 05.10.2010
Сообщений: 46
По умолчанию

coinkrsk, заглянул в книгу Страуструпа, в параграфе про манипуляторы ничего не нашёл. Единственное, в теме про флаги форматирования есть замечание, что если установлено более одного флага выравнивания, то неопределено, что произойдёт. Что значит одновременно?
Типа если я установил:
Код:
cout.setf(ios::right);
то перед установкой
Код:
cout.setf(ios::left);
нужно его обязательно сбросить что ли? Иначе как было по правому краю, так и будет.

Ну или аналогично с манипуляторами: почему в обоих случаях устанавливается выравнивание по правому краю:
Код:
cout << setw(20) << setiosflags(ios::left) << setiosflags(ios::right) << 5 << endl;
cout << setw(20) << setiosflags(ios::right) << setiosflags(ios::left) << 5 << endl;
rommster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по setiosflags() и double fs444 Общие вопросы C/C++ 1 25.12.2009 11:37