Бьерн Страуструп - Язык программирования С++. Главы 8-10 - Поля вывода
ОГЛАВЛЕНИЕ
Страница 51 из 65
10.4.1.2 Поля вывода
Функция width() устанавливает минимальное число символов, использующееся в последующей операции вывода числа или строки. Так в результате следующих операцийcout.width(4);получим число 12 в поле размером 4 символа, т.е.
cout << '(' << 12 << ')';
( 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, можно более элегантно задавать размера поля вывода.