2016-11-08 113 views
-3

我的代碼有什麼問題?它顯示板後會崩潰。字符功能有什麼問題嗎?我已經仔細考慮了至少一個小時,但仍然無法找出問題所在。簡單的C程序崩潰

這裏是我的代碼:

#include <stdio.h> 

void gameboard(char board[8][8]) 
{ 

int x, y; 

    for(x=0; x<16; x++) 
    { 
    for(y=0; y<8; y++) 
    { 
    if(x % 2 == 0) 
    { 
    printf(" %c ", board[x][y]); 
    }else{ 
    printf("| %c |",board[x][y]); 
    } 

    }printf("\n"); 

    } 




} 
void character(char board[8][8]) 
{ 
int x,y; 

for(x=0;x<16;x++){ 
    for(y=0;y<8;y++){ 

    if(x<6){ 

     if(x%2 == 0){ 
       if(x%2 == 0){ 
       board[x][y] = ' '; 

       } 
      } 



     if(x%2 == 1){ 
       if(y%2 == 0){ 
       board[x][y] = 'O'; 
       } 
       if(y%2 ==1){ 
      board[x][y]= ' '; 

       } 
     } 

     if(x==3){ 
     if(y%2 == 1){ 
     board[x][y] = 'O'; 
     } 
     if(y%2 == 0){ 
     board[x][y] = ' '; 
     } 
     } 
    } 

    if((x==6)||(x==7)||(x==8)||(x==9)){ 
    board[x][y] = ' '; 
    } 


    if(x>9) 
    { 

     if(x%2 == 0){ 
       if(x%2 == 0){ 
       board[x][y] = 'X'; 

       } 
       if(y%2 == 0){ 
       board[x][y] = ' '; 
      } 

     } 

     if(x%2 == 1){ 
       if(y%2 == 1){ 
       board[x][y] = ' '; 
       } 

     } 
     if(x==12){ 
     if(y%2 == 0){ 
     board[x][y] = 'X'; 
     } 
     if(y%2 == 1){ 
     board[x][y] = ' '; 
     } 

     } 

    }    

    } 
} 
} 



int main() 
{ 

    char bx[8][8]; 




    character(bx); 

    gameboard(bx); 




return 0; 

} 
+2

您是否已經在調試器中逐步瞭解代碼?你很可能在數組邊界之外進行索引。學習正確的調試技術與學習語言一樣重要。 – OldProgrammer

回答

2

您板有8×8元素:

char bx[8][8]; 

當你做的事情與董事會,您可以訪問元素,直到X = 16:

for(x=0;x<16;x++){ 
    ... 
    board[x][y] = ' '; 

因此,您訪問board陣列越界並覆蓋一些不屬於0123的其他內存。如果那個內存包含重要的東西,你的程序可能會崩潰。