如何保证 std::cout 始终使用 n 宽度

How to guarantee that std::cout always uses n width

提问人:Ivan 提问时间:11/2/2022 最后编辑:ChrisIvan 更新时间:11/2/2022 访问量:60

问:

我的输出如下所示:

BTC-USDT              [FTX] 20460.91 20470.09
BTC-USDT              [BINANCE_US] 20457.34 20467.28 
BTC-USDT              [BINANCE_US] 20457.50 20467.28

我希望它看起来像这样:

BTC-USDT  [       FTX] 20460.91 20470.09 
BTC-USDT  [BINANCE_US] 20457.34 20467.28
BTC-USDT  [BINANCE_US] 20457.50 20467.28

我想我对这段代码很接近,但我对setw()

std::cout << pair << std::setfill(' ') << std::setw(15) << " [" << exch << "] " << fixed << setprecision(2) <<  bid << " " << ask << std::endl;
C++ 爱马尼普

评论

5赞 Nathan Pierson 11/2/2022
填充和宽度设置将应用于 ,而不是 。" ["exch

答:

3赞 Chris 11/2/2022 #1

如注释中所述,iomanip 设置需要在它们要应用的项目之前应用。

填写示例中缺失变量的值:

#include <iomanip>
#include <iostream>

int main() {
  std::cout << "Foo " << "[" 
            << std::setfill(' ') << std::setw(15)
            << "Bar" << "] " 
            << std::fixed << std::setprecision(2) <<  20.897
            << " " << 1.4566 << std::endl;

  return 0;
}

输出:

Foo [            Bar] 20.90 1.46
2赞 Remy Lebeau 11/2/2022 #2

如果希望给定值具有某些输出特性,如宽度、对齐方式等,则需要在输出值之前应用相应的 I/O 操纵器,而不是在输出值之后

在您的示例中,您希望以 9 的宽度左对齐,并以 10 的宽度右对齐,因此请相应地应用和/,例如:pairexchstd::setwstd::leftstd::right

std::cout << std::setfill(' ')
          << std::setw(9) << std::left << pair
          << " [" << std::setw(10) << std::right << exch << "] "
          << std::fixed << std::setprecision(2) << bid << ' ' << ask
          << std::endl;

输出:

BTC-USDT  [       FTX] 20460.91 20470.09
BTC-USDT  [BINANCE_US] 20457.34 20467.28
BTC-USDT  [BINANCE_US] 20457.50 20467.28

在线演示