2016-05-14 33 views
-1

所以我一直试图在网格中画一个空心方块。我使用宽度为10和高度为5的二维数组创建了网格原来的字符“*”。当从给定的坐标改变每个数组的值时,我从坐标的正方形画出正方形的左上角。问题是,当我印刷它出来只有一半的外部完成。Grid中的空心方块

我错过了一个条件或太多的条件时,重写网格数组的部分?感谢您的帮助。

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

的问题是在双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)另有设置'*'

好。

但是你不能因为np范围从x-1y-1,包括,以x+size-1y+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:对不起,我的英语不好

+0

对不起,我当时的想法是,我想我只是算错。非常感谢你的帮助。 – pandalot