【问题标题】:How can I draw a box in C++ using Unicode?如何使用 Unicode 在 C++ 中绘制一个框?
【发布时间】:2018-04-16 18:58:38
【问题描述】:

我正在尝试用 Unicode 用 C++ 制作一个小 RPG,但我什至无法制作一个简单的盒子。我有以下代码

#include <iostream>
#include <string>

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() {
  PrintLevel();
}

void PrintLevel() {
    for(int i = 0; i<5; i++) {
        for(int j = 0; j<4; j++) {
            cout << lvl[i][j];
            if(j == 3) {
                cout << "\n";
            }
        }
    }
}

但它画了这个

我怎样才能让它画一个合适的盒子?

【问题讨论】:

  • 不要使用stdio,因为它过于依赖终端渲染和用户选择的字体。
  • 好像打印不错onlinegdb.com/B1h47uzhf
  • @Mgetz 我不是?
  • @KeineLust 它没有被编辑为使用iostream,我一直使用它。
  • 在终端中使用 monospace 字体。

标签: c++ unicode


【解决方案1】:

水平线使用\u2500,2501是比单个空格大的重线。

或者您可以使用\u3000 表意空间来替换 0020(不确定它在每种字体中都能正常工作,但看起来还可以)。

【讨论】:

【解决方案2】:

所以只有盒子右侧的对齐问题,对吗?看起来它应该可以正确打印,所以也许尝试再添加一列空格?此外,您可以跳过换行符的 if 语句,并将 cout &lt;&lt; endl; 放在内部循环的结束括号之后:

    for (...) {
        for (...) {

        }
        cout << endl;
    }

【讨论】:

    猜你喜欢
    • 2014-08-04
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    相关资源
    最近更新 更多