2017-01-23 4 views
2

my output valuesCの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]は動作しますが、最初の5行では何もなく、6番目の半分で動作するようには見えません。彼らは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。範囲外の配列にアクセスすると、の定義されていない動作がトリガされます。これは、セグメント化障害を引き起こす可能性があります。長い間気づかれずに残ったり、プログラムの出力を変えたりすることがあります。ここでは、ダンジョンをゼロにすることで、ゲームボードが部分的にゼロになりました。そのようにしてください:あなたのゲームは陽気になるでしょう!

+0

ありがとう、私はそれを捕まえたことはありません –