2014-10-17 3 views
0

Я смотрю на разных веб-сайтах .. но все, что заставляет меня понять, в чем проблема. Я только начал программировать на C. Задача заключалась в рисовании шахматной доски с использованием 2 и постройте функцию, которая чередуется с черно-белым (с использованием соответствующих символов).Использование 2-мерного массива, ошибка сегментации (сбрасывание ядра)

#include <stdio.h> 

char makeChessBoard(int length,int width, char board[width][length]) { 
    int i; 
    int j; 
    for (i = 0; i < width; i++) { 
    // printf("\n"); 
    for (j = 0; j < length; j++) { 
     if((i+j)%2 == 0) 
     board[i][j] = "[#]"; 
     else 
     board[i][j] = "[ ]"; 
    }//for 
    }//for 
    //return 0; 

}//makeChessBoard 


int main() 
{ 
int x = 9; 
int y = 9; 
char initialBoard[x][y]; 
char chessBoard[x][y]; 
makeChessBoard(initialBoard[x][y],x,y); 
for (int i = 0; i < x; i++) { 
    printf("\n"); 
    for (int j = 0; j < y; j++) { 
     printf("%s", chessBoard[i][j]); 
    }//for 
    }//for 


}//main 
+3

Хммм 9х9 шахматной доске? – chux

+0

Можете ли вы приблизительное местоположение, где он падает? – thumbmunkeys

+0

'printf ("% s ", chessBoard [i] [j]);' не будет работать, поскольку 'chessBoard' не инициализируется. – chux

ответ

0

1) Ваше назначение функции makeChessBoard(initialBoard[x][y],x,y); и определение функции различны, это должно быть: (int length,int width, char board[width][length]).

2) В функции makeChessBoard изменить board[i][j] = "[#]"; на board[i][j] = '#';. Аналогичным образом измените board[i][j] = "[ ]"; на board[i][j] = ' ';.

3) Во время печати вы должны печатать значения initialBoard, поскольку вы заполнили значения в этом 2D-массиве, поэтому измените printf("%s", chessBoard[i][j]); на printf("[%c]", initialBoard[i][j]);.

4) Начальный индекс массива начинался с нуля, поэтому, если вы печатаете шахматную доску x и y, должно быть установлено значение 8.

#include <stdio.h> 

char makeChessBoard(int length,int width, char board[width][length]) 
{ 
    int i; 
    int j; 
    for (i = 0; i < width; i++) 
    { 
     for (j = 0; j < length; j++) 
     { 
      if(((i+j) % 2) == 0) 
       board[i][j] = '#'; 
      else 
       board[i][j] = ' '; 
     }//for 
    }//for 
}//makeChessBoard 

int main() 
{ 
    int x = 8; 
    int y = 8; 
    int i,j; 
    char initialBoard[x][y]; 
    //char chessBoard[x][y]; /* You are not using this 2-D array */ 
    makeChessBoard(x,y,initialBoard); 
    for (i = 0; i < x; i++) 
    { 
     for (j = 0; j < y; j++) 
     { 
      printf("[%c]", initialBoard[i][j]); 
     }//for 
     printf("\n"); 
    }//for 
}//main 

Выход:

[#][ ][#][ ][#][ ][#][ ] 
[ ][#][ ][#][ ][#][ ][#] 
[#][ ][#][ ][#][ ][#][ ] 
[ ][#][ ][#][ ][#][ ][#] 
[#][ ][#][ ][#][ ][#][ ] 
[ ][#][ ][#][ ][#][ ][#] 
[#][ ][#][ ][#][ ][#][ ] 
[ ][#][ ][#][ ][#][ ][#] 
0

Вы называете makeChessboard так:

makeChessBoard(initialBoard[x][y],x,y); 

, но это определяется следующим образом:

char makeChessBoard(int length,int width, char board[width][length]) 

Обратите внимание, что вы передаете массив в неправильном положении параметра.

Кроме того, вы передаете конкретный элемент массива (по x, y) вместо всего массива.

1

Превратите предупреждения о

makeChessBoard(initialBoard[x][y],x,y); 

должен быть

makeChessBoard(x, y, initialBoard); 

board[i][j] = "[#]"; /* you can't assign a string, use a char e.g: '#' */ 

же для

board[i][j] = "[ ]"; 

Наконец, вы печатаете символы, используйте:

printf("%c", chessBoard[i][j]); 

вместо

printf("%s", chessBoard[i][j]); 
0

Попробуйте запустить код с предупреждениями поддержкой (НКУ -Wall ...) и проверить, что компилятор покажет вы. Непосредственной причиной segfault является, вероятно, char вместо char *.

Смежные вопросы