Выравнивание (форматирование) вывода в C++ // Несколько переменных в одной строке

Я пытаюсь отобразить (используя cout) координаты набора точек и хочу получить что-то вроде этого:

Point 1: (    2.10 ,     3.95)
Point 2: ( -511.00 ,   108.66)
Point 3: (    0.00 , -1000.33)

Я пытался использовать setw(), std::left, std::left и std::internal, но получаю только такие вещи, как:

Point 1: (    2.10 , 3.95)
Point 2: (    -511.00, 108.66)
Point 3: (    0.00, -1000.33)

Это пример моей строки вывода:

cout << "Point: " << i;
cout << setw(8) << left << " (" << p[i][0] << ", " << p[i][1] << ")" << endl;

Может ли кто-нибудь дать рекомендации о том, как я могу достичь желаемого результата? Спасибо.


person user3787097    schedule 01.07.2014    source источник
comment
Попробуйте использовать setw непосредственно перед переменной, которую вы хотите изменить, и повторите перед каждой переменной, ширина которой должна быть фиксированной.   -  person Ben Voigt    schedule 01.07.2014
comment
На этот вопрос легко ответить, прочитав первую часть хорошего справочника или учебника.   -  person Thomas Matthews    schedule 01.07.2014
comment
Возможный дубликат stackoverflow.com/questions/15674097/output-aligned-columns   -  person Thomas Matthews    schedule 01.07.2014
comment
@BenVoigt Большое спасибо за сотрудничество, я пробую это прямо сейчас.   -  person user3787097    schedule 01.07.2014
comment
@ThomasMatthews Я не могу использовать ваш ответ, так как вы не предлагаете никаких хороших справочников или руководств.   -  person user3787097    schedule 01.07.2014


Ответы (1)


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

Итак, вы, вероятно, хотите

std::cout << " (" << std::setw(8) << std::right << p[i][0]
          << ", " << std::setw(8) << std::right << p[i][1] << ")" << std::endl;
person Ben Voigt    schedule 01.07.2014