格式化C ++ setw

时间:2014-03-26 13:44:17

标签: c++ format

我正在进行格式化,但是我没有获得正确的格式。

这是我的代码,这是我得到的输出

cout << fixed << setprecision(2) << setw(3) << right << source << setw(20)
                 <<right <<vec[source].cityname
                 << setw(15) << left<< sink << setw(15) << left <<vec[sink].cityname
                 << setw(10) << left << vdist[ij] << "miles\n";

我得到了这个:

30      Novosibirsk_RU13             Tokyo_JP       10497.68  miles

我想得到这个:

30 Novosibirsk_RU       13  Tokyo_JP             10497.67 miles

如何在名称和号码之间获得该空格?

我已经在这方面工作了一段时间,但我无法获得正确的格式

1 个答案:

答案 0 :(得分:1)

您在std::right声明中错误地使用了cout IO操纵器。要实现示例中显示的输出,您希望vec[source].citynamevec[sink].cityname显然保持对齐:

cout << fixed << setprecision(2) << setw(3) << right << source << 
                 setw(20) << left <<vec[source].cityname <<
                          // ^^^^
                 setw(3) << left<< sink << 
                   // ^
                 setw(15) << left <<vec[sink].cityname << 
                 setw(10) << left << vdist[ij] << "miles\n";

另请注意,如果您使用setw(n)并且n小于下一个字段(string)变量的长度,则不会被截止,但会转移整数输出到右边的附加字符数。