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

C++结构体字段值错位求助:打印表格时内容显示异常

解决C++表格打印字段错位问题

你遇到的错位问题根源是依赖制表符\t做列对齐——制表符的跳转长度是固定的(通常为8个字符),但不同内容的长度存在差异,比如短名字Smith(5个字符)后加两个\t会跳得比长名字Mitchell(8个字符)更远,直接打乱了列的对齐逻辑。

解决方案:用固定宽度格式化输出

改用C++的setw(设置字段宽度)和left(左对齐)来控制每列的显示宽度,需要包含<iomanip>头文件来使用这些格式化工具。

修改后的完整代码如下:

#include <iostream>
#include <string>
#include <vector>
#include <iomanip>  // 新增头文件,用于格式化输出
using namespace std;

struct SPlayer {
    string name;
    string team;
    int goalsScored;
    int yellowcards;
    int redcards;
};

void PrintHeader() {
    // 用setw固定每列宽度,left设置左对齐
    cout << left << setw(15) << "name" 
         << setw(10) << "team" 
         << setw(8) << "goals" 
         << setw(15) << "yellow cards" 
         << setw(10) << "red cards" << endl;
    cout << "--------------------------------------------------------------------" << endl;
}

void PrintTable(SPlayer player) {
    cout << left << setw(15) << player.name 
         << setw(10) << player.team 
         << setw(8) << player.goalsScored 
         << setw(15) << player.yellowcards 
         << setw(10) << player.redcards << endl;
}

int main()
{
    SPlayer mitchell = { "Mitchell" , "Red" , 4 , 1 , 0 };
    SPlayer smith = { "Smith" , "Blue" , 8 , 0 , 0 };
    SPlayer white = { "White" , "Green" , 0 , 2 , 4 };
    SPlayer doe = { "Doe" , "Yellow" , 2 , 1 , 0 };

    vector<SPlayer> players;
    players.push_back(mitchell);
    players.push_back(smith);
    players.push_back(white);
    players.push_back(doe);
    
    PrintHeader();

    for (const auto& p : players) {  // 改用范围for循环更简洁
        PrintTable(p);
    }
}

关键说明

  • setw(n):设置当前输出字段的宽度为n个字符,不足部分用空格填充
  • left:设置内容左对齐(默认是右对齐,数字字段也可按需改为右对齐)
  • 必须包含<iomanip>头文件:才能使用setw和left等格式化工具

修改后,不管每个字段的内容长度如何,每列都会保持固定宽度,表格对齐就不会再错位。

内容的提问来源于stack exchange,提问作者rennian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:12:38