2013-10-24 38 views
0

因此,我因为第一年分配所需的这个子任务而日复一日地面临脱发。在阵列中打印“盒子”

我需要在程序的初始化阶段在坐标[5] [5] /即中心板的打印“”周围的数目。

的 '盒子' 由...组成 “|” 覆盖的侧面和 “_” 上部,且数目的底部在坐标[5] [5]

当我执行这个程序,板显示,但''没有。 这是为什么发生?

下面是代码:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

//FUNCTION: Draw the Board 
int drawBoard() 
{ 
    //Declare array size 
    int board[9][9]; 

    //initialize variables 
    int rows, columns, randomNumber, flag; 

    //random number seed generator 
    srand(time(NULL)); 

     for (rows = 0 ; rows < 9 ; rows++) 
     { 

      for (columns = 0 ; columns < 9 ; columns++) 
      { 
       flag = 0; 

       do 
       { 
        //generate random numbers from 2 - 8 

        randomNumber = rand() %7 + 2; 

        board[rows][columns] = randomNumber; 

         //Display the 'box' if rows and columns == 5/i.e - board[5][5] 
         if (rows == 5 && columns == 5) 
         { //Checks for 2 adjacent numbers 
          if (board[rows][columns] == board[rows - 1][columns] || board[rows][columns] == board[rows][columns - 1]) 
          { 
           flag = 0; 
           continue; 
          } 
          else 
          { 
           flag = 1; 

           //Print 'box' 
           marker(rows, columns); 
          } 
         } 

        //Checks for 2 adjacent numbers. 
        if (board[rows][columns] == board[rows - 1][columns] || board[rows][columns] == board[rows][columns - 1]) 
         { 
          flag = 0; 
          continue; 
         } 

        else 
        //Prints the correct board 
         { 
           flag = 1; 
           printf(" %d ", board[rows][columns]); 
         } 

       } while (flag == 0); //end outer do-while 

      }//end inner for-loop 

      printf("\n\n"); 

     }//end outer for-loop 

}//end FUNCTION drawBoard 

//FUNCTION: Mark the surrounding of the number with "|" and "_" at board[5][5] 
void marker(int x, int y, int** board) 
    { 
    board[x][y-1] == "\n _ "; 
    board[x][y+1] == "\n _ "; 
    board[x-1][y] == " |"; 
    board[x+1][y] == "| "; 
    } 

int main() 
{ 
    drawBoard(); 
} 

TI

+0

你有没有试过在调试器中运行这个?确保'marker'被调用? – crashmstr

+0

由于板是int类型的? – PhillipD

+0

是从[0,9]范围内的棋盘上的数字? – titus

回答

0
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <time.h> 

//FUNCTION: Draw the Board 
char tochar(int i) 
{ 
    return i+'0'; 
} 
void marker(int x, int y, char board[][19]); 
int check(int x, int y, char board[][19]) 
{ 
    if(x>1&&board[2*x+1][2*y+1]==board[2*x-1][2*y+1]) 
     return 1; 

    if(y>1&&board[2*x+1][2*y+1]==board[2*x+1][2*y-1]) 
     return 1; 
    return 0; 
} 
int drawBoard() 
{ 
    //Declare array size 
    char board[19][19]; 

    memset(board,32, sizeof(board)); 
    //initialize variables 
    int rows, columns, randomNumber, flag; 

    //random number seed generator 
    srand(time(NULL)); 

     for (rows = 0 ; rows < 9 ; rows++) 
     { 

      for (columns = 0 ; columns < 9 ; columns++) 
      { 
       flag = 0; 

       do 
       { 
        //generate random numbers from 2 - 8 

        randomNumber = rand() %7 + 2; 
        board[2*rows+1][2*columns+1] = tochar(randomNumber); 

         //Display the 'box' if rows and columns == 5/i.e - board[5][5] 
         if (rows == 4 && columns == 4) 
         { //Checks for 2 adjacent numbers 
          if (check(rows, columns, board)) 
          { 
           flag = 0; 
          } 
          else 
          { 
           flag = 1; 

           marker(2*rows+1, 2*columns+1, board); 
           //Print 'box' 
          } 
         } 
        else 
        { 
        //Checks for 2 adjacent numbers. 
        if (check(rows, columns, board)) 
         { 
          flag = 0; 
         } 

        else 
        //Prints the correct board 
         { 
          flag = 1; 
//       printf(" %c ", board[2*rows+1][2*columns+1]); 
         } 
        } 
       } while (flag == 0); //end outer do-while 

      }//end inner for-loop 

      printf("\n\n"); 

     }//end outer for-loop 
    for(rows=0;rows<19;rows++) 
    { 
     for(columns=0;columns<19;columns++) 
     { 
      printf("%c",board[rows][columns]); 
     } 
     printf("\n"); 
    } 
}//end FUNCTION drawBoard 

//FUNCTION: Mark the surrounding of the number with "|" and "_" at board[5][5] 
void marker(int x, int y, char board[][19]) 
    { 
    board[x][y-1] = '|'; 
    board[x][y+1] = '|'; 
    board[x-1][y] = '_'; 
    board[x+1][y] = '_'; 
    /* 
192 
191 
217 
218 
*/ 
    } 

int main() 
{ 
    drawBoard(); 
} 
+0

嗨@titus,程序工作正常。但是,你可能已经预测到,即使我试图分析它,我脑海中仍然有很多问号。非常感谢您的帮助!! –

+0

好问,我会尽力解释,我必须去,没有时间添加任何解释 – titus

+0

我想我会试着问一点一点地吸收,以避免信息超载。首先你可以解释为什么数组大小重新调整为[19] [19]而不是预期的[9] [9]? –

0
void marker(int x, int y, int** board) 
    { 
    board[x][y-1] == "\n _ "; 
    board[x][y+1] == "\n _ "; 
    board[x-1][y] == " |"; 
    board[x+1][y] == "| "; 
    } 

这是行不通的。 '=='用于比较,而不是分配。你需要一个'='。 但是,board是一个int数组,你不能在int数组中分配一个const char*(因为这就是"something")。您的板应字符数组,然后可以分配这样的:

void marker(int x, int y, char** board) 
    { 
    board[x][y-1] = '_'; 
    board[x][y+1] = '_'; 
    board[x-1][y] = '|'; 
    board[x+1][y] = '|'; 
    } 

另一个问题是,在板的中心是在指数[4] [4],的表的第五元件大小9.但是,这是一个小问题...

0

我看你想在这里做什么,这不是我常想,所以我可能不会有帮助:■

首先,错误: in "drawboard": marker(rows, columns)

原型"marker": void marker(int x, int y, int** board)。我不认为与国旗汇编将工作(是的,标志是有益的,试试"gcc -Wall -Wextra -Werror"

此外,我认为你应该重新认为你的功能“标记”,它不能工作。

我觉得board[x][y-1] = "\n _ "会做的伎俩,如果你return(board[x][y-1])但同样,我也有工作,有char**,而不是一个整数标签,并与许多短函数(使用write代替printf:P)