Бьерн Страуструп - Язык программирования С++. Главы 9-10
Страница 30. Поля вывода



10.4.1.2 Поля вывода

Функция width() устанавливает минимальное число символов, использующееся
в последующей операции вывода числа или строки. Так в результате
следующих операций

        cout.width(4);
        cout << '(' << 12 << ')';

получим число 12 в поле размером 4 символа, т.е.

        (  12)

Заполнение поля заданными символами или выравнивание можно установить с
помощью функции fill(), например:

        cout.width(4);
        cout.fill('#');
        cout << '(' << "ab" << ')';

напечатает

        (##ab)

По умолчанию поле заполняется пробелами, а размер поля по умолчанию
есть 0, что означает "столько символов, сколько нужно". Вернуть размеру
поля стандартное значение можно с помощью вызова

        cout.width(0); // ``столько символов, сколько надо''

Функция width() задает минимальное число символов. Если появится больше
символов, они будут напечатаны все, поэтому

        cout.width(4);
        cout << '(' << "121212" << ")\n";

напечатает

        (121212)

Причина, по которой разрешено переполнение поля, а не усечение вывода,
в том, чтобы избежать зависания при выводе. Лучше получить правильную
выдачу, выглядящую некрасиво, чем красивую выдачу, являющуюся
неправильной.
      Вызов width() влияет только на одну следующую за ним операцию
вывода, поэтому

        cout.width(4);
        cout.fill('#');
        cout << '(' << 12 << "),(" << '(' <<12 << ")\n";

напечатает

        (##12),(12)

а не

        (##12),(##12)

как можно было бы ожидать. Однако, заметьте, что если бы влияние
распространялось на все операции вывода чисел и строк, получился бы
еще более неожиданный результат:

        (##12#),(##12#
        )

С помощью стандартного манипулятора, показанного в 10.4.2.1, можно более
элегантно задавать размера поля вывода.

 
« Предыдущая статья   Следующая статья »