C int数组问题

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

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

最佳答案

问题出在这里:

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

关于C int数组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41814405/

相关文章:

java - 复制一个数组

Tkinter 网格管理器中的 Python 类

c - 结构体初始化-C

objective-c - 从 .mm 文件中的函数内部调用 C 函数

javascript - 删除对象数组中的记录 jQuery

python - 值错误 : 'axis' entry is out of bounds//numpy

c - 无法找出C程序崩溃的原因

c - C 中的运行时函数解析?

python - 在网格管理器中使用带有 Tkinter 的输入框?

css - 嵌套 Bootstrap 行