2013-12-14 8 views
0

나는 직교 평면을 만드는 프로그램을 만들고자한다. 당신은 줄의 기본 정보를 입력하고 그 줄을 그립니다.직교 평면 무한대?

너무 잘 작동하지 않는 것이 좋지 않습니다.

for(int x=0;x<MAP_HEIGHT;x++) 
{ 
    piano.griglia[x][a*x+b]='X'; 
} 

그러나 그것은 잘 작동하지 않습니다 : 기본적으로이 라인의 모든 지점에서 X 숯을두고 루프입니다! 결과는 다음과 같습니다. http://i.imgur.com/u01Bdk7.jpg 3 행이 어떻게 하나가되어야하는지주의하십시오. 비행기의 코드는 다음과 같습니다.

class Cartesiano 
{ 
public: 
char griglia[MAP_LENGHT+1][MAP_HEIGHT+1]; 
Cartesiano(void) 
{ 
    for(int y=0;y<=MAP_HEIGHT;y++) 
    { 
     for(int x=0;x<=MAP_LENGHT;x++) 
     { 
      if (y==0)griglia[x][y]='_'; 
      else 
      { 
       if(x==0)griglia[x][y]='|'; 
       else griglia[x][y]=' '; 
      } 
     } 
    } 
} 
void Draw(void) 
{ 
    for(int y=MAP_HEIGHT;y>=0;y--) 
    { 
     for(int x=0;x<=MAP_LENGHT;x++)cout<<griglia[x][y]; 
     cout<<"\n"; 
    } 
} 
}piano; 

아이디어가 있으십니까?

+0

'MAP_HEIGHT'와'MAP_LENGTH'의 값이 무엇을 얻고 권합니다? 초기화 할 때 왜 "드로잉"할 때 적절한 중첩 루프를 사용할 때 단일 루프를 사용해야합니까? –

+0

처음에는 #define으로 정의한 것들은 모두 50입니다. 게다가 루프 부분을 얻지 못했습니다. 중첩 루프를 사용했습니다. 무엇이 잘못 되었나요? – NetHacker

답변

2

y 값이 49 (MAP_HEIGHT - 1)를 초과하면 배열이 오버 플로우됩니다. 드로우 루프 당신이 y=a*x+b 대신 X의 인쇄 Z를 계산하면 첫 번째 라인은 X의와 오버 플로우 오류가있는 것입니다 볼 수 있습니다 모든 Z의

for(int x=0;x<MAP_LENGTH;x++) 
{ 
    int y = a*x+b; 
    if(y<MAP_HEIGHT) { 
     piano.griglia[x][y]='X'; 
    } else { 
     piano.griglia[x][y]='Z'; 
    } 
} 

이에 저장되어있는 배열하는 방식의 메모리 때문입니다 C + +, 단지 하나의 배열 외부에 쓰기가 발생하면 다음 배열에 쓸 수 있습니다. 일반적으로 이렇게하면 프로그램이 중단됩니다.

여기에서 x 루프는 MAP_LENGTH 이상이어야합니다.

는 또한 강력 적절한 그래픽 라이브러리

+0

다른 사람이'MAP_LENGTH'의'MAP_LENGTH'에 대한 철자를 '유용하게'정정했고 내 답변에서이 참조를 제거 했으므로 이제는 제가 제공 한 것에 붙여 넣기 만하면 효과가 없습니다. 이것을 사용하려면 길이의 철자를 수정하십시오. – user2711915

+0

감사합니다. 같은 적절한 그래픽 라이브러리? 너 하나 제안 할 수 있니? 또한 MAP_LENGHT 것을 유감스럽게 생각합니다! 영어가 제 첫 언어가 아닙니다! :) 배열 크기는 실제로 MAP_HEIGHT + 1, -1이 아닙니다. – NetHacker

+0

C++에서 사용할 수있는 간단한 라이브러리는 [allegro] (https://www.allegro.cc/)입니다. 많은 설정이 있습니다. 가이드 및 자습서가 있습니다. 나는 이것을 묻는 가장 좋은 사람이 아니며 만약 당신이하고 싶은 것이 플롯 그래프라면, 그것을위한 특정 라이브러리가 있고, R과 같은 다른 언어가 훨씬 더 사용하기 쉽다. – user2711915