Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Левосторонее формирование вывода  (Прочитано 720 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Scot_Tenorman

  • Автор темы
  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
По умолчанию форматирование вывода в C++ в консоли происходит по правому краю. При помощи манипулятора
setiosflags(ios::left) изменить на левосторонее выравнивание. Но данный мтд не работает. И в разных стороках
новые столбы совершенно с разных позиций пишутся. Как решить эту проблему?

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля

Оффлайн Scot_Tenorman

  • Автор темы
  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Re: Левосторонее формирование вывода
« Ответ #2 : 17 Январь 2012, 02:21:42 »
Два почти одинаковых кода:
1)
#include <iostream>
#include <iomanip> 
using namespace std;
int main()
   {
  cout<<setw(20)<< setiosflags(ios::left) <<"Фамилия"<<setw(20)<<"Имя"<<setw(20)<<"Адрес"<<setw(20)<<"Город"<<endl
<<setw(20)<<"Петров"<<setw(20)<<"Василий"<<setw(20)<<"Кленовая 16"<<setw(20)<<"Санкт-Петербурбург"<<endl
   <<setw(20)<<"Иванов"<<setw(20)<<"Сергей"<<setw(20)<<"Осиновая 3"<<setw(20)<<"Находка"<<endl
   <<setw(20)<<"Сидоров"<<setw(20)<<"Иван"<<setw(20)<< "Березовая 21"<<setw(20)<<"Калининград"<<endl;   
   return 0;
   }
2)
#include <iostream>
#include <iomanip> 
using namespace std;
int main()
   {
    cout<<setw(20)<< setiosflags(ios::left) <<"Lastname"<<setw(20)<<"Name"<<setw(20)<<"Adress"<<setw(20)<<"City"<<endl
<<setw(20)<<"Petrov"<<setw(20)<<"Vasilii"<<setw(20)<<"Klenovaya 16"<<setw(20)<<"Sankt-Peterburg"<<endl
   <<setw(20)<<"Ivanov"<<setw(20)<<"Sergei"<<setw(20)<<"Osinovaya 3"<<setw(20)<<"Naxodka"<<endl
   <<setw(20)<<"Sidorov"<<setw(20)<<"Ivan"<<setw(20)<< "Berezovaya 21"<<setw(20)<<"Kaliningrad"<<endl;     
   return 0;
   }

В первом случае функция setiosflags(ios::left) не справляется со своей задачей. Во втором все прекрасно.
Первый случай:

Второй случай:


Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Левосторонее формирование вывода
« Ответ #3 : 17 Январь 2012, 10:12:52 »
UTF-8, однако. Кодировка с переменной длиной символа и работать с ней в чистом виде очень тяжко.
Никто в здравом уме так не делает. Есть способ проще.

Код: (CPP) [Выделить]
#include <iostream>
#include <iomanip>
#include <locale>

using namespace std;

int main()
{
    locale::global(locale(""));
    wcout << setw(20) << setiosflags(ios::left) << L"Фамилия" << setw(20) << L"Имя" << setw(20) << L"Адрес" << setw(20) << L"Город" << endl
  << setw(20) << L"Петров" << setw(20) << L"Василий" << setw(20) << L"Кленовая 16" << setw(20) << L"Санкт-Петербурбург" << endl
  << setw(20) << L"Иванов" << setw(20) << L"Сергей" << setw(20) << L"Осиновая 3" << setw(20) << L"Находка" << endl
  << setw(20) << L"Сидоров" << setw(20) << L"Иван" << setw(20) << L"Березовая 21" << setw(20) << L"Калининград" << endl;
   return 0;
}

 

Страница сгенерирована за 0.075 секунд. Запросов: 24.