这是我的初始板。我遇到的第一个问题是,当用户输入板大小时,它总是打印相同的10乘10,而不是用户要求的。其次,我在下面有一个函数,它应该检查每个单元格并将匹配条件的单元格转换为空白或破折号。我在打印纸板时遇到了麻烦。谁能告诉我我哪里做错了?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10
int createBoard();
int main(int argc, char *argv[])
{
createBoard();
}
int createBoard()
{
char myArray[MAX][MAX];
char letter[3] = {'a', 'b', 'c'};
int i,j,row,col;
printf("Please enter your grid size: ");
scanf("%d %d", &row, &col);
if(row < 10 && col < 10){
for(i=0; i < MAX; i++){
for(j=0; j < MAX; j++){
myArray[i][j] = letter[rand()%3];
}
}
for(i=0; i < MAX; i++){
for(j=0; j < MAX; j++){
printf("%c ", myArray[i][j]);
}
printf("n");
}
}
else{
printf("Board is too bign");
createBoard();
}
int var;
var = move(myArray);
}
//to check each cell
int newBoard(char myArray[MAX][MAX])
{
int i,j;
for(i=0; i < MAX; i++){
for(j=0; j< MAX; j++){
if(myArray[i][j] == 'c' && myArray[i+1][j] == 'c'){
myArray[i][j] == ' ';
myArray[i+1][j] == ' ';
}
else{
//no update
}
}
}
}
对于第一个问题,更改For循环
for(i=0; i < MAX; i++){
for(j=0; j < MAX; j++){
...
}
}
使用row
和col
变量
for(i=0; i < row; i++){
for(j=0; j < col; j++){
...
}
}
第一个问题解决方案:因为在for循环中你要经过MAX改为:
for(i=0; i < row; i++){
for(j=0; j < col; j++){
myArray[i][j] = letter[rand()%3];
}
}
第二个问题的解决方案:检查函数的第一个问题是你应该通过引用而不是通过值来传递我的数组通过添加'&'符号来更改它第二个问题是你需要输入if(myArray[i][j] == 'c' &&myArray[i+1][j] == 'c')当i等于MAX-1(最后一步)并且myArray[i+1][j]不存在时,会导致问题!!因为数组的大小是[MAX][MAX],当i = MAX-1,你的大小将是[MAX+1][MAX]