所以我一直试图在网格内画一个空心方块。我使用宽度为10和高度为5的2d数组创建了最初使用“*
”字符的网格。当从给定的特定坐标更改每个数组值时,我从坐标为正方形的左上角绘制正方形。问题是,当我打印出来时,外出只有一半。
重写部分网格数组时,我是否错过了一个条件或太多条件?谢谢你的帮助。
int main(){
char grid[5][10];//initialize array that will be row and column
for(int i=0;i<5;i++){
for(int j=0;j<10;j++){
grid[i][j]= '*';
}//for
}//for loop to fill grid with asterisk
cout << "GRID" << endl << endl;
for(int i=0;i<5;i++){
for(int j=0;j<10;j++){
cout << grid[i][j] ;
}//for
cout << endl;
}//for loop to print grid no shapes inside
cout << endl << endl;
int x = 2;
int y = 3;
int size = 3;
char c = 'o';
//will have a condition here to check if it can fit inside the
//grid but this is just to test it will be a member function.
for(int n=x-1;n<x+size-1; n++){
for(int p=y-1;p<y+size-1; p++){
if (n == x-1 || n==x+size-1 || p == y-1 || p== y+size-1 ){
grid[n][p] = c;
}
else
grid[n][p] = '*';
}//for
}//for loop to rewrite specific array coordinates with new c
cout << "Shape inside grid." << endl;
for(int n=0;n<5;n++){
for(int p=0;p<10;p++){
cout << grid[n][p];
}//for
cout << endl;
}//for loop to print new grid
return 0;
}
/*
This is my output:
**********
**ooo*****
**o*******
**o*******
**********
This is what I need:
**********
**ooo*****
**o*o*****
**ooo*****
**********
*/
答案 0 :(得分:1)
问题出在双for
,您将广场的边框设置为'o'
。
for(int n=x-1;n<x+size-1; n++){
for(int p=y-1;p<y+size-1; p++){
if (n == x-1 || n==x+size-1 || p == y-1 || p== y+size-1 ){
grid[n][p] = c;
}
else
grid[n][p] = '*';
}
}
如果我理解的话,你的意图是通过正方形的点(for(int n=x-1;n<x+size-1; n++)
和for(int p=y-1;p<y+size-1; p++)
)进行迭代,检查该点是否为边界点(if (n == x-1 || n==x+size-1 || p == y-1 || p== y+size-1 )
)和( a)在边框情况下,设置c
(即'o'
),(b)设置'*'
。
好。
但您失败了,因为n
和p
的范围来自x-1
和y-1
,包括x+size-1
和y+size-1
,的排除强>
因此n
不能为x+size-1
:上限(包含)限制为x+size-2
。 p
不能为y+size-1
:上限(已包含)为y+size-2
。
总结:你的测试应该是
if (n == x-1 || n==x+size-2 || p == y-1 || p== y+size-2 )
p.s:抱歉我的英语不好