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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
PolKilo
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 15
#1

Флаги выравнивания - C++

20.09.2012, 00:18. Просмотров 2119. Ответов 7
Метки нет (Все метки)

Просветите пожалуйста )
Как выровнять по левому краю такое :
cout<<"S="<<S<<"\n"; ?
Вот участок кода:
C++
1
2
3
4
5
6
void Figura::show_S()
{
    cout.width(20);
    cout.setf(ios::left);
    cout<<"S="<<S<<"\n";
}
Выводит как :
S=________________4; Символом "_" обозначил пробелы;
Что с этим делать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2012, 00:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Флаги выравнивания (C++):

Функция выравнивания текста в выходной файл - C++
Всем привет форумчане. Преподаватель дал задачу, написать функцию, которая берет строки из входного файла (in.txt) и центрирует их и...

Составить процедуру выравнивания заданной строки текста - C++
Выравнивание строки заключается в том,что между её отдельными словами дополнительно вносятся пробелы так,чтобы длина строки стала равной...

Оператор new гарантирует алокацию непрерывного блока памяти? (выравнивания) - C++
Ну собственно сабж. Делаю int* data = new data; Оператор new гарантирует, что в памяти выделится непрерывный кусочек, в котором один...

Как правильно записать мантису и порядок, после выравнивания порядков - C++
Подскажите, пожалуйста!!! Нужно Сложить 2 двоичных числа с плавающей запятой(с промежуточными результ.). 1-е число: мантисса 0,10101...

Флаги - C++
Подскажите для чего используются эти флаги: setiosflags(ios::fixed | ios::showpoint). Видел их использование совместно с setprecision(2)....

Не работают флаги - C++
#include &quot;stdafx.h&quot; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;iomanip&gt; using namespace std; ...

7
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
20.09.2012, 00:32 #2
какой вывод нужен?
0
Elfenlide
23 / 23 / 1
Регистрация: 15.04.2012
Сообщений: 183
20.09.2012, 00:34 #3
C++
1
2
3
4
5
6
void pad(std::string& s, int len)
{
    if(s.length() >= len)
        return;
    s.insert(s.begin(), len - s.length(), ' ');
}
передаёшь в функцию где s - строка , где len - длина строки
0
PolKilo
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 15
20.09.2012, 00:44  [ТС] #4
Мне нужно вывести S= и его значение слева, а оставшиеся справа пробелы заполнить любым знаком;
Дело в том, что cout.setf(ios::left); действует только на (S=) . Значение S выводит уже по умолчанию справа. Можно ли это сделать не записывая по отдельности сout<<"S="; cout<<S;

Добавлено через 3 минуты
Спасибо, но значение S у меня целое, а не строчное и к тому же мне нужно разобраться с флагами форматирования.

Добавлено через 4 минуты
И подскажите еще кто то флаг для выравнивания по середине пожалуйста)
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
20.09.2012, 00:51 #5
cout.width(20); задаёт "ширину" числа. Убери и оно будет слева. Или задай ту ширину, которая тебе нужна.
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
20.09.2012, 00:51 #6
http://www.cplusplus.com/reference/iostream/manipulators/setw/
Sets the number of characters to be used as the field width for the next insertion operation.
я тут в справочнике уточнил, там более определенно написано что это форматирование применяется
ТОЛЬКО к следующей операции вывода.
итого у вас получается что выводится "S=" c выравниванием слева и с заполнением по умолчанию.
далее в обычном режиме выводится четверка. похоже поменять это нельзя. придется ручками высчитывать нужные параметры форматирования и вставлять в правильные места.
вот какой-то такой огород нужно городить или что-нить другое:
http://liveworkspace.org/code/67f531288ed5e3b471539ac91b1f544c

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>
#include <string>
 
using namespace std;
 
void print()
{
  const char* prefix = "S=";
  cout<<prefix;
  cout << setfill('_');
  cout.width(20 - char_traits<char>::length(prefix));
  cout.setf(ios::left);
  cout<< 4 <<"\n";
}
 
int main()
{
  print();
  return 0;
}
1
PolKilo
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 15
20.09.2012, 00:58  [ТС] #7
Ясно) Спасибо) Прийдется все таки городить)

Добавлено через 56 секунд
Цитата Сообщение от lazybiz Посмотреть сообщение
cout.width(20); задаёт "ширину" числа. Убери и оно будет слева. Или задай ту ширину, которая тебе нужна.
Так в том то и дело , что это мне тоже нужно))) Не было бы нужно - не парился бы)
0
Elfenlide
23 / 23 / 1
Регистрация: 15.04.2012
Сообщений: 183
20.09.2012, 00:58 #8
Цитата Сообщение от PolKilo Посмотреть сообщение
Мне нужно вывести S= и его значение слева, а оставшиеся справа пробелы заполнить любым знаком;
Дело в том, что cout.setf(ios::left); действует только на (S=) . Значение S выводит уже по умолчанию справа. Можно ли это сделать не записывая по отдельности сout<<"S="; cout<<S;

Добавлено через 3 минуты
Спасибо, но значение S у меня целое, а не строчное и к тому же мне нужно разобраться с флагами форматирования.

Добавлено через 4 минуты
И подскажите еще кто то флаг для выравнивания по середине пожалуйста)
C++
1
2
3
4
5
6
int main(void) { 
    int mas[5]={1,2,3,4,5};
    for (int i=0; i<5; i++)
        cout<<setw(10)<<setfill('*')<<mas[i]<<" ";
    cout<<endl;
}
Это как пример, setw отвечает за пробелы, тоесть если у тебя число 113 занимает 3 позиции и ты обьявил set(10) то тебе выдаст 7 пробелов и потом 113, а вот setfill отвечает за то чтобы вместо пробелов выводились какие-либо знаки, в моём случае это "*".
чтобы это работало нужно добавить #include <iomanip>.
А чтобы всё это выводило так чтобы число было слева а потом идут символы, можешь результат записать в массив char, а потом просто поменять элементы местами, последний с первым, тогда получиться 4__________, ну или если с setfill то 4********.
0
20.09.2012, 00:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2012, 00:58
Привет! Вот еще темы с ответами:

Битовые флаги. - C++
Пожалуйста может объяснить &quot;Пример хранения битовых флагов. Их считывание и установка.&quot; И что это такое вообще.

Флаги потока cout. - C++
Здравствуйте. Возник вопрос. В данным момент в целях изучения пишу класс больших чисел. В стандартном потоке вывода есть манипулятор...

Флаги форматирования cout - C++
В чем разница, кроме того, что первые два флага форматирования задаются в качестве манипуляторов? cout &lt;&lt; setiosflags(ios::fixed); ...

Флаги (вывод сообщения) - C++
Есть программа, которая записывает в файл, считывает, удаляет и т.д. Это кусок функции удаления. Пользователь вводит фамилию...


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

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

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