输出结果不符合我的预期

时间:2017-01-06 16:24:03

标签: c++ for-loop cout

#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;
}

我想使用“■”字符打印一个大正方形,但看起来正方形的右侧搞砸了,我很确定这不是UNICODE问题,我认为我的代码也没问题。在用“#”替换“■”字符后,它确实打印了我期望的大广场。我不知道为什么正方形的右侧与“■”字符搞混了。

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

这里有一些截图:

When I use "■"

This is what I want

3 个答案:

答案 0 :(得分:1)

Acutally,&#34;■&#34;不是char而是字符串文字。当您尝试执行char c = "■";时,编译器会给出如下错误。在strlen(const char *str)标题中使用#include<cstring>来衡量其长度,然后我得到3。

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

答案 1 :(得分:0)

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

Windows控制台使用的固定宽度字体中的字符不是正方形。它们大约是8x16,包括填充。您需要将水平轴的字符数加倍,才能获得类似于正方形的字符。

See this link for a more extended character codes.

确保您也使用cmd.exe的理智字体。

我将您的来源修改为:

#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;
}

我明白了:

enter image description here

答案 2 :(得分:0)

我写过很多主机游戏,我相信一次输出 2 空间是一个经验法则:

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

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