#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位
这里有一些截图:
答案 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;
}
我明白了:
答案 2 :(得分:0)
我写过很多主机游戏,我相信一次输出 2 空间是一个经验法则:
for (int x = 0; x < Map_x; ++x)
{
if (x == 0 || x == Map_x - 2)
cout << "■";
cout << " ";
// ^^ TWO!
}