2017-01-23 23 views
2

my output valuesçint數組問題

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

#define W 160 
#define H 105 

struct dungeons { 
    int x; 
    int y; 
    int width; 
    int height; 
}; 

void randomNumberGenerator(int seed); 
void makeGameBoard(int gameBoard[W][H]); 
void makeDungeonRooms(struct dungeons d[10]); 
void printGame(int gameBoard[W][H]); 

int main(int argc, char *argv[]) { 
    int gameBoard[W][H]; 
    //int gameBoard[160][105] = {2}; 

    struct dungeons d[10]; 

    makeGameBoard(gameBoard); 
    makeDungeonRooms(d); 
    printGame(gameBoard); 

    return 0; 
} 

void randomNumberGenerator(int seed) { 
    srand(seed); 
} 

void makeGameBoard(int gameBoard[160][105]) { 
    int i; 
    int j; 
    for (j = 0; j < 105; j++) { 
     for (i = 0; i < 160; i++) { 
      gameBoard[i][j] = 2; 
      //gameBoard[i][j] = 2; 
      /* 
      if (j == 0) { 
       gameBoard[i][j] = 2; 
      } else 
      if (j == 104) { 
       gameBoard[i][j] = 2; 
      } else 
      if (i == 0) { 
       gameBoard[i][j] = 2; 
      } else 
      if (i == 159) { 
       gameBoard[i][j] = 2; 
      } else { 
       gameBoard[i][j] = 4; 
      } 
      */ 
     } 
    } 
    gameBoard[0][1] = 2; 
    gameBoard[0][0] = 2; 
    gameBoard[159][0] = 3; 
} 

void makeDungeonRooms(struct dungeons d[10]) { 
    int i; 
    for (i = 0; i < W; i++) { 
     d[i].x = 0; 
     d[i].y = 0; 
     d[i].width = 0; 
     d[i].height = 0; 
    } 
} 

void printGame(int g[W][H]) { 
    int i; 
    int j; 

    for (i = 0; i < W; i++) { 
     for (j = 0; j < H; j++) { 
      printf("%d", g[i][j]); 
      /* 
      if (g[i][j] == 2) { 
       printf("|"); 
      } else 
      if (g[i][j] == 1) { 
       printf("X"); 
      } else { 
       printf(" "); 
      } 
      */ 
     } 
     printf("\n"); 
    } 
} 

我正在做一個網格。但是第5行和第6行的一半,打印時輸出值0.我將for循環中的所有內容都設置爲2,甚至在我嘗試手動更改該值時,仍然沒有。最後一個[159] [0]起作用,但是在第6排的前5排和半排中似乎沒有任何效果。他們保持0.爲什麼?

+3

向我們展示您的函數調用? – haccks

+2

請顯示[mcve]。 – GoodDeeds

+1

發佈的代碼很好。也許你以一種錯誤的方式調用函數,或者可能以錯誤的方式打印數組。換句話說 - 你需要發佈更多的代碼才能獲得任何幫助。 – 4386427

回答

1

的問題是在這裏:

void makeDungeonRooms(struct dungeons d [10]){ 
    int i; 
    for(i = 0; i< W; i++){ 
    d[i].x = 0; 
    d[i].y = 0; 
    d[i].width = 0; 
    d[i].height = 0; 
    } 
} 

其中#define W 160。訪問數組越界會觸發未定義的行爲。它可以觸發分段故障,它可以保持很長時間不被注意或以非常奇怪的方式改變程序的輸出。在這裏,調整地牢也部分歸零gameBoard。保持這種狀態:你的遊戲會變得很熱鬧!

+0

謝謝,我woudve從來沒有發現 –