C int数组问题

时间:2017-01-23 19:48:34

标签: c arrays grid int

my output values

#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");
    }
}

我制作一个网格。但是第6行的前5行和第1行,当打印输出值为0.我在for循环中将所有内容设置为2,甚至在我尝试手动更改值后,仍然没有。最后一个[159] [0]有效,但前5行中没有任何内容,而第6行中的一半似乎无效。他们留0。为什么?

1 个答案:

答案 0 :(得分: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。访问数组越界可触发未定义的行为。它可以触发分段错误,它可以长时间不被注意或以非常奇怪的方式改变程序的输出。在这里,将地牢归零也部分归零了游戏板。保持这种方式:你的游戏会很有趣!