You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确保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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:26:11