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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
PolKilo
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 15
20.09.2012, 00:18     Флаги выравнивания #1
Просветите пожалуйста )
Как выровнять по левому краю такое :
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; Символом "_" обозначил пробелы;
Что с этим делать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2012, 00:18     Флаги выравнивания
Посмотрите здесь:

Манипуляторы и флаги формата C++
Битовые флаги. C++
что такое флаги? C++
C++ Флаги для прогораммы C++
Пользовательские битовые флаги C++
Не работают флаги C++
Флаги C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
20.09.2012, 00:32     Флаги выравнивания #2
какой вывод нужен?
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 - длина строки
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 минуты
И подскажите еще кто то флаг для выравнивания по середине пожалуйста)
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,056
Записей в блоге: 10
Завершенные тесты: 1
20.09.2012, 00:51     Флаги выравнивания #5
cout.width(20); задаёт "ширину" числа. Убери и оно будет слева. Или задай ту ширину, которая тебе нужна.
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
20.09.2012, 00:51     Флаги выравнивания #6
http://www.cplusplus.com/reference/i...pulators/setw/
Sets the number of characters to be used as the field width for the next insertion operation.
я тут в справочнике уточнил, там более определенно написано что это форматирование применяется
ТОЛЬКО к следующей операции вывода.
итого у вас получается что выводится "S=" c выравниванием слева и с заполнением по умолчанию.
далее в обычном режиме выводится четверка. похоже поменять это нельзя. придется ручками высчитывать нужные параметры форматирования и вставлять в правильные места.
вот какой-то такой огород нужно городить или что-нить другое:
http://liveworkspace.org/code/67f531...539ac91b1f544c

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;
}
PolKilo
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 15
20.09.2012, 00:58  [ТС]     Флаги выравнивания #7
Ясно) Спасибо) Прийдется все таки городить)

Добавлено через 56 секунд
Цитата Сообщение от lazybiz Посмотреть сообщение
cout.width(20); задаёт "ширину" числа. Убери и оно будет слева. Или задай ту ширину, которая тебе нужна.
Так в том то и дело , что это мне тоже нужно))) Не было бы нужно - не парился бы)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2012, 00:58     Флаги выравнивания
Еще ссылки по теме:

C++ Оператор new гарантирует алокацию непрерывного блока памяти? (выравнивания)
Составить процедуру выравнивания заданной строки текста C++
C++ Как правильно записать мантису и порядок, после выравнивания порядков
Флаги форматирования cout C++
Флаги (вывод сообщения) C++

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

Или воспользуйтесь поиском по форуму:
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********.
Yandex
Объявления
20.09.2012, 00:58     Флаги выравнивания
Ответ Создать тему
Опции темы

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