【问题标题】:C int array issueC int 数组问题
【发布时间】:2017-01-23 19:48:33
【问题描述】:

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。为什么?

【问题讨论】:

  • 向我们展示你的函数调用?
  • 贴出的代码没问题。也许您以错误的方式调用该函数,或者您以错误的方式打印数组。换句话说 - 您需要发布更多代码以获得任何帮助。
  • 发布了其余部分。我打印了所有 16800 个值。只有前 5 行和第 6 行的一半不会手动或在 for 循环中更改

标签: c arrays grid int


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

【讨论】:

    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多