C++ Как отформатировать строку текста, содержащую переменные целые числа, чтобы она была выровнена по правому краю в пределах заданной ширины?

Цель форматирования следующая

   Absolute value of the number you entered : 723
                 Square root of that number : 26.89
       Rounding this to the nearest integer : 27
  Two random numbers between 27 and 723 are : ...

Это мой код в его нынешнем виде

  cout << right << setw(50) << "Absolute value of the number you entered : " << absoluteValue << endl;
  cout << right << setw(50) << "Square root of that number : " << squareRoot << endl;
  cout << right << setw(50) << "Rounding this to the nearest integer : " << roundedSquareRoot << endl;
  cout << right << setw(50) << "Two random numbers between " << roundedSquareRoot << " and " << absoluteValue << " are : ";

Когда я бегу, я получаю это

   Absolute value of the number you entered : 723
                 Square root of that number : 26.89
       Rounding this to the nearest integer : 27
                   Two random numbers between 27 and 723 are :

Выравнивание по правому краю самой нижней строки и setw() применяются только к первому «тексту». Как мне сделать так, чтобы он применялся ко всему в этой строке? Спасибо

Редактировать: Чтобы было ясно, я просто хочу, чтобы нижняя строка действовала как верхняя тройка.


person Samuel Roddenberry    schedule 17.09.2019    source источник


Ответы (1)


Вам нужно представить последнюю строку как одну строку.
Лучше всего создать эту строку заранее.

std::sstream  lastLineStream;
lastLineStream << "Two random numbers between " 
               << roundedSquareRoot << " and " 
               << absoluteValue << " are : ";

Теперь вы можете распечатать его как одну строку.

 cout << right << setw(50) << "Rounding this to the nearest integer : " << roundedSquareRoot << endl;
 cout << right << setw(50) << lastLineStream.str();

Примечание:

предпочитаю '\n' std::endl. Они оба делают одно и то же, затем std::endl очищает буфер. Ручная очистка буфера обычно является неправильным действием.

person Martin York    schedule 17.09.2019