Что делает комбинация setf (ios :: left, ios :: Adjustfield)? - PullRequest
4 голосов
/ 01 декабря 2011

Я читал учебник и наткнулся на эту строку.

Кажется, что форматирование вывода выглядит красиво в двух столбцах (я предполагаю, что левый получит заданную ширину, чтобы правый выглядел даже, поскольку все этоначинается в том же столбце).Я не слишком уверен в том, что на самом деле делает эта линия.

cout.setf(ios::left, ios::adjustfield);

Может кто-нибудь объяснить мне это?

1 Ответ

5 голосов
/ 01 декабря 2011

Выводит текст в поле фиксированной ширины с выравниванием по левому краю. См. эту ссылку . Это использует второе переопределение этой функции, которая принимает маску, в которой устанавливаются определенные флаги.

Это переопределение удаляет все существующие флаги, установленные в std::ios_base::adjustfield, который обрабатывает выравнивание текста, выводимого через объект stream.

Переопределение, которое не принимает маску флага (второй параметр), просто дополнительно устанавливает указанный флаг, что не имеет большого смысла в случае adjustfield, поскольку действительные значения только left , right и internal, которые все имеют дело с текстовым выравниванием.

Надеюсь, этот небольшой пример прояснит:

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
   cout.setf(std::ios::left, std::ios::adjustfield);
   cout << setfill('^') << setw(10) << "Hello" << "\n";

   cout.setf(std::ios::right, std::ios::adjustfield);
   cout << setfill('0') << setw(10) << "99\n";

   return 0;
}

Дает вывод:

Hello^^^^^
000000099
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...