C++ 输出结果不是我所期望的

C++ 输出结果不是我所期望的,c++,for-loop,cout,C++,For Loop,Cout,我想用■ 字符来打印一个大正方形,但是看起来正方形的右边乱七八糟,我很确定这不是UNICODE的问题,我认为我的代码也没有问题。我换了■ 字符,它确实打印了我所期望的一个大正方形。我不知道为什么广场的右边会把墙弄乱■ 性格 我的IDE:Visual Studio 2015专业版 操作系统:Windows 10 Pro 64位 以下是一些屏幕截图: 选择一个不同的角色。试试ASCII 254■ 而不是Unicode字符 Windows控制台使用的固定宽度字体中的字符不是正方形。包括填充物在内,它们

我想用■ 字符来打印一个大正方形,但是看起来正方形的右边乱七八糟,我很确定这不是UNICODE的问题,我认为我的代码也没有问题。我换了■ 字符,它确实打印了我所期望的一个大正方形。我不知道为什么广场的右边会把墙弄乱■ 性格

我的IDE:Visual Studio 2015专业版 操作系统:Windows 10 Pro 64位

以下是一些屏幕截图:


选择一个不同的角色。试试ASCII 254■ 而不是Unicode字符

Windows控制台使用的固定宽度字体中的字符不是正方形。包括填充物在内,它们大约为8x16。您需要将横轴的字符数大约增加一倍,才能得到类似正方形的东西

请确保您对cmd.exe使用的字体也正确无误

我将您的源代码修改为:

#include <iostream>

using namespace std;

int main(void)
{
    const int Map_x = 30, Map_y = 30;

    for (int x = 0; x < Map_x; ++x)
        cout << "■";

    cout << endl;

    for (int y = 0; y < Map_y; ++y)
    {
        for (int x = 0; x < Map_x; ++x)
        {
            if (x == 0 || x == Map_x - 2)
                cout << "■";

            cout << " ";
        }

        cout << endl;
    }

    for (int x = 0; x < Map_x; ++x)
        cout << "■";

    cout << endl;

    return 0;
}
我明白了:


准确地说,■ 不是字符而是字符串文字。当您尝试执行char c=■;, 然后编译器会给出如下错误。在include头中使用strlencost char*str来测量它的长度,然后得到3

#include <iostream>

using namespace std;

int main(void)
{
    const int Map_x = 30, Map_y = 30;
    char c = 254;

    for (int x = 0; x < Map_x; ++x)
        cout << c;

    cout << endl;

    for (int y = 0; y < Map_y; ++y)
    {
        for (int x = 0; x < Map_x; ++x)
        {
            if (x == 0 || x == Map_x - 2)
                cout << c;

            cout << " ";
        }

        cout << endl;
    }

    for (int x = 0; x < Map_x; ++x)
        cout << c;

    cout << endl;

    getchar();

    return 0;
}

我写了很多控制台游戏,我相信一次输出2个空格是一个经验法则:

1.cpp:7:14: error: invalid conversion from 'const char*' to 'char' [-fpermissive]
     char c = "■";

正方形可能有2个字符宽,而监狱窗口只有1个字符。您可能只需要在顶部和底部少打印2倍的正方形。还有,那不是正方形!你没看到这些字符有不同的宽度吗?正方形比空格宽…是的,伙计们,我注意到了■ 字符被定义为常量字符[3],但字符被定义为常量字符[2],但是如何解决空间问题tho,谢谢!选择一个不同的角色。试试ASCII 254■ 而不是Unicode字符。好的,输出仍然是一样的,就像我使用■ character,我是应该复制您发送到那里的字符,还是应该在代码中添加一些内容?@BaronZhu而不是x,将其设置为char-单引号-然后您可能需要更改源文件的代码页。想要在cmd.exe中使用的字体吗?当我运行这个时,我得到了什么?为了一切,你是说像这样?我在那里看到你的照片,但实际上是印刷的■ 在我的控制台上
    for (int x = 0; x < Map_x; ++x)
    {
        if (x == 0 || x == Map_x - 2)
            cout << "■";

        cout << "  ";
//               ^^ TWO!
    }