如何确保std::cout实现固定宽度的格式化对齐输出?
解决C++ std::cout输出对齐问题
当前输出
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(15)作用在了" ["这个字符串上,没有针对交易所名称做宽度控制。setw()只对紧随其后的单个输出项生效,要实现交易所名称右对齐补空格的效果,需要单独给交易所名称设置固定宽度和对齐方式。
修正后的代码
#include <iostream> #include <iomanip> #include <string> int main() { std::string pair = "BTC-USDT"; // 模拟数据 std::string exch_list[] = {"FTX", "BINANCE_US", "BINANCE_US"}; double bid_list[] = {20460.91, 20457.34, 20457.50}; double ask_list[] = {20470.09, 20467.28, 20467.28}; for (int i = 0; i < 3; ++i) { // 交易对左对齐,占12位(BTC-USDT占10位,补2个空格) std::cout << std::left << std::setw(12) << pair; // 交易所名称右对齐,占10位,不足补空格 std::cout << "[" << std::right << std::setw(10) << exch_list[i] << "] "; // 价格固定两位小数 std::cout << std::fixed << std::setprecision(2) << bid_list[i] << " " << ask_list[i] << "\n"; } return 0; }
关键说明
std::left << std::setw(12):让交易对左对齐,占12个字符宽度,确保BTC-USDT后固定补2个空格,和期望格式匹配。std::right << std::setw(10):让交易所名称右对齐,占10个字符宽度。FTX仅3个字符,自动补7个空格;BINANCE_US正好10个字符,无需补空格,实现对齐效果。setw()仅对下一个输出项生效,所以每个需要控制宽度的部分要单独设置;std::fixed << std::setprecision(2)设置后会持续生效,无需重复写。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

