Почему здесь не работает setw(n)?

Вот моя проблема:

Имея три переменные, a, b, c, типа double, которые уже были объявлены и инициализированы, напишите некоторый код, который печатает каждую из них в 15-позиционном поле на той же строке так, чтобы научная (или электронная, или экспоненциальное обозначение) избегается. Каждое число должно быть напечатано с 5 цифрами справа от десятичной точки. Например, если бы их значения были 24,014268319, 14309, 0,00937608, результат был бы таким:

|ххххххх24.01427хххх14309.00000хххххххх0.00938

ПРИМЕЧАНИЕ. Вертикальная черта | , слева вверху представляет собой левый край области печати; это не для распечатки. Кроме того, мы показываем x в выводе выше для обозначения пробелов — в вашем выводе на самом деле не должно быть x!

Вот, по сути, что я пытаюсь сделать:

cout << fixed << setprecision(5) << 24.014268319 << setw(5) << 5252.25151516 << endl;

Но это дает следующий результат:

24.014275252.25152

Очевидно, я не понимаю, как правильно использовать setw(n), кто-нибудь видит, что я здесь делаю неправильно?


person hax0r_n_code    schedule 25.01.2015    source источник
comment
Какой результат вы ожидаете? Второе число, которое вы отправляете cout, отсутствует в условии задачи, и вы выводите пробел между первым и вторым числами.   -  person Captain Obvlious    schedule 26.01.2015
comment
разве ты не должен говорить setw(15) вместо этого?   -  person rodrigo    schedule 26.01.2015
comment
@CaptainObvlious полученные числа являются случайными, поэтому я просто предоставил случайное число. Я жду 24.01427 5252.25152   -  person hax0r_n_code    schedule 26.01.2015
comment
@rodrigo, это решило мою проблему, но почему setw(5) не содержит пробелов между числами?   -  person hax0r_n_code    schedule 26.01.2015
comment
Попробуйте использовать setw(15) перед первым числом.   -  person Mats Petersson    schedule 26.01.2015
comment
setw() определяет, сколько места должно занимать число (по крайней мере, если вы напечатаете 10010191001121.1234, оно вполне может занять больше - и, таким образом, между ними не будет пробела.   -  person Mats Petersson    schedule 26.01.2015
comment
Нет, setw(5) расширит ширину, используемую следующим числом, до 5 символов, но, учитывая, что он сам использует около 10, он не делает ничего полезного. Если вам нужен пробел, просто << ' '.   -  person rodrigo    schedule 26.01.2015
comment
@rodrigo понял, спасибо! Я новичок в С++, очевидно, ха-ха   -  person hax0r_n_code    schedule 26.01.2015


Ответы (1)


Манипулятор ввода-вывода setw(...) немного сложен, поскольку его эффект сбрасывается, т. е. ширина устанавливается обратно в ноль после каждого вызова << (среди прочего, описанного в документация).

Вам нужно вызвать setw(15) несколько раз, например:

cout << fixed << setprecision(5) << setw(15) << 24.014268319  << setw(15) << 5252.25151516 << endl;

Демо.

person Sergey Kalinichenko    schedule 25.01.2015