2014-03-26 56 views
1

我正在格式化,我没有得到正确的格式。格式化C++ setw

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

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

您已经在cout声明中错误地使用了std::right 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)变量,它赢得不会被截断,但会将整个输出转移到附加字符数量的右侧。