Ключ, как говорили другие, использовать манипуляторы. То, что они пренебрегли, говорит, что вы обычно используете манипуляторы, которые вы пишете сами. Манипулятор FFmt
(который соответствует формату F
в Фортране, довольно прост:
class FFmt
{
int myWidth;
int myPrecision;
public:
FFmt( int width, int precision )
: myWidth( width )
, myPrecision( precision )
{
}
friend std::ostream&
operator<<( std::ostream& dest, FFmt const& fmt )
{
dest.setf( std::ios_base::fixed, std::ios_base::formatfield );
dest.precision( myPrecision );
dest.width( myWidth );
return dest;
}
};
Таким образом, вы можете определить переменную для каждого столбца, например:
FFmt col1( 8, 2 );
FFmt col2( 6, 3 );
// ...
и напишите:
std::cout << col1 << value1
<< ' ' << col2 << value2...
В общем, кроме простейших программ, вероятно, вы не должны использовать стандартные манипуляторы, а скорее настраиваемые манипуляторы на основе вашего приложения, например temperature
и pressure
, если это то, с чем вы сталкиваетесь. Таким образом, в коде ясно, что вы форматируете, и если клиент вдруг попросит еще одну цифру в давлении, вы точно знаете, где произвести изменение .