我正在尝试制作一个制作笛卡尔平面的程序;你输入了线的基本信息,他画线。
太糟糕了,它不能正常工作。基本上这是在行的每个点放置X char的循环:
for(int x=0;x<MAP_HEIGHT;x++)
{
piano.griglia[x][a*x+b]='X';
}
但它效果不好!这是结果: http://i.imgur.com/u01Bdk7.jpg 注意有三条线应该只有一条。这是飞机的代码,它可能会有所帮助:
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 :(得分:2)
当你的y值超过49(MAP_HEIGHT - 1
)时,你的阵列就会溢出。如果你在绘制循环中计算y=a*x+b
并打印Z而不是X,你会看到第一行是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
。
我还强烈建议你买一个合适的图形库