2017-01-06 9 views
0
#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; 
} 

큰 정사각형을 인쇄하려면 "■"문자를 사용하고 싶지만 정사각형의 오른쪽과 같이 보이지만 나는 유니 코드 문제가 아니라고 확신합니다. 내 코드에는 아무런 문제가 없다고 생각합니다. "■"문자를 "#"으로 바꾼 후에 큰 사각형 인 것으로 예상 한 것을 인쇄했습니다. 나는 왜 광장의 오른쪽이 "■"문자로 엉망인지 모르겠다.출력 결과가 예상 한 것과 다릅니다.

내 IDE : 비주얼 스튜디오 2015 프로페셔널 운영 체제 : Windows 10 프로 64 비트 여기

는 스크린 샷입니다 :

When I use "■"

This is what I want

+0

사각형은 아마도 2 자이고 감옥 창은 1 자입니다. 상단과 하단에 2 배 적은 정사각형을 인쇄하면됩니다. 또한, 그것은 사각형이 아닙니다! – tambre

+4

이러한 문자가 너비가 다른 것을 알지 못합니까? – ForceBru

+1

사각형이 공간보다 넓습니다. –

답변

0

다른 문자를 선택합니다. Unicode 문자보다는 ASCII 254를 사용하십시오.

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

+0

출력은 여전히 ​​"■"문자를 사용하는 것과 똑같습니다. 거기에 보낸 문자를 복사해야합니까, 아니면 내 코드에 뭔가를 추가해야합니까? –

+0

@BaronZhu "x"대신 char - single quotes로 만드십시오. 소스 파일의 코드 페이지를 다시 바꿀 수도 있습니다. cmd.exe에서 글꼴을 사용하고 싶습니까? 내가 이걸 실행할 때, 나는 모든 것을 얻는다. –

+0

당신은 이런 뜻인가요?cout << '■' –

1

Acutally "■"숯불하지만 문자열 리터럴이 아닙니다. char c = "■";을 실행하려고하면 컴파일러에서 아래와 같은 오류가 발생합니다. 나는 3.

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

내가 꽤 많은 콘솔 게임을 쓴 얻고 나는 그것을 한 번에 출력 엄지 손가락의 규칙 공간하다고 생각, 그 길이를 측정 #include<cstring> 헤더에 strlen(const char *str)를 사용

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

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