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

如何在C++中使用Unicode绘制方框?RPG开发代码求助

搞定C++里的Unicode方框绘制问题

嘿,我来帮你解决这个小麻烦!先看你的代码,最明显的问题就是PrintLevel()函数里的循环没写完,不过就算补全了,控制台大概率还会乱码——毕竟Windows默认控制台不怎么待见Unicode,下面一步步来:

第一步:把没写完的循环补完整

你的二维数组是5行4列,得用嵌套循环把每个字符都输出出来,不然方框根本拼不起来:

void PrintLevel() {
    for(int i = 0; i < 5; ++i) {  // 遍历每一行
        for(int j = 0; j < 4; ++j) {  // 输出当前行的每个字符
            cout << lvl[i][j];
        }
        cout << endl;  // 每行结束记得换行,不然所有字符会挤成一团
    }
}

第二步:解决控制台Unicode乱码问题

Windows默认控制台用的是GBK编码,完全认不出你用的这些Unicode方框字符,所以得先把控制台的输出编码改成UTF-8。我们可以用Windows的API来搞定,记得加上<windows.h>头文件:

修改后的完整代码如下:

#include <iostream>
#include <string>
#include <windows.h>  // 用来设置控制台编码的头文件
using namespace std;

void PrintLevel();
string lvl[5][4] {
    {"\u250f", "\u2501", "\u2501", "\u2513"},
    {"\u2503", "\u0020", "\u0020", "\u2503"},
    {"\u2503", "\u0020", "\u0020", "\u2503"},
    {"\u2503", "\u0020", "\u0020", "\u2503"},
    {"\u2517", "\u2501", "\u2501", "\u251B"}
};

int main() {
    SetConsoleOutputCP(CP_UTF8);  // 把控制台输出编码切换为UTF-8
    PrintLevel();
    return 0;
}

void PrintLevel() {
    for(int i = 0; i < 5; ++i) {
        for(int j = 0; j < 4; ++j) {
            cout << lvl[i][j];
        }
        cout << endl;
    }
}

额外小贴士

  • 如果是在Linux或者macOS上运行代码,控制台默认就支持UTF-8,不用加SetConsoleOutputCP这一行,直接补全循环就能正常显示方框
  • 记得你的代码文件要保存为UTF-8编码,不然源文件里的Unicode字符本身就会乱掉
  • 也可以试试用宽字符类型来处理,比如把数组改成wstring,输出用wcout:
    wstring lvl[5][4] {
        {L"\u250f", L"\u2501", L"\u2501", L"\u2513"},
        {L"\u2503", L"\u0020", L"\u0020", L"\u2503"},
        // 剩余行同理加上L前缀
    };
    
    输出时用wcout << lvl[i][j];,这种方式也能绕开编码兼容问题

这样改完之后,你就能看到整整齐齐的方框啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:18:25