【发布时间】:2017-08-13 22:52:17
【问题描述】:
| |0|1|2|3|4|5|6|7|8|9|
|0| | | | | | | | | | |
|1| | | | | | | | | | |
|2| | | | | | | | | | |
|3| | | | | | | | | | |
|4| | | | | | | | | | |
|5| | | | | | | | | | |
|6| | | | | | | | | | |
|7| | | | | | | | | | |
|8| | | | | | | | | | |
|9| | | | | | | | | | |
我正在尝试制作一个看起来像这样的网格。目前,每当我尝试运行可执行文件时,我都会不断转储分段错误核心。编译器也没有显示任何错误。我也不知道如何在网格内打印数字。下面是我目前拥有的代码(只是整个作业的一部分)。非常感谢任何帮助。
void displayBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH], Player * player)
{
/* TODO */
int i,j;
char grid[BOARD_HEIGHT + 2][BOARD_WIDTH + 2];
for(i = 0; i < BOARD_HEIGHT; i++)
{
for(j = 0; j < BOARD_WIDTH; j++)
{
grid[BOARD_HEIGHT + 2][BOARD_WIDTH + 2] = '|';
printf("%c", grid[BOARD_HEIGHT + 2][BOARD_WIDTH + 2]);
printf("%s", EMPTY_OUTPUT);
}
printf("\n");
}
}
BOARD_HEIGHT 和 BOARD_WIDTH 是在头文件中定义的变量。
#ifndef BOARD_H
#define BOARD_H
#include "helpers.h"
#include "player.h"
#define BOARD_WIDTH 10
#define BOARD_HEIGHT 10
typedef enum cell
{
EMPTY,
BLOCKED,
PLAYER
} Cell;
#define EMPTY_OUTPUT " "
#define BLOCKED_OUTPUT "*"
Cell BOARD_1[BOARD_HEIGHT][BOARD_WIDTH];
Cell BOARD_2[BOARD_HEIGHT][BOARD_WIDTH];
typedef enum playerMove
{
PLAYER_MOVED,
CELL_BLOCKED,
OUTSIDE_BOUNDS
} PlayerMove;
void initialiseBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH]);
void loadBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH],
Cell boardToLoad[BOARD_HEIGHT][BOARD_WIDTH]);
Boolean placePlayer(Cell board[BOARD_HEIGHT][BOARD_WIDTH], Position position);
PlayerMove movePlayerForward(Cell board[BOARD_HEIGHT][BOARD_WIDTH],
Player * player);
void displayBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH], Player * player);
#endif
第二部分在头文件中。
完整的代码可以在这里找到a1
【问题讨论】:
-
你能显示完整的代码吗?
-
grid[BOARD_HEIGHT + 2][BOARD_WIDTH + 2]超出范围。 -
@aschepler,不是。 OP 需要显示更多代码。 Seg 故障发生在其他地方。
-
您缺少输出数字的代码部分,并且您没有使用传入的 Board 数组,而是使用未初始化的网格数组。不需要使用网格数组,也不需要存储'|'数组中的字符,只需根据需要打印出行,但不要存储它们。最后也是最重要的一点,你应该使用 i 和 j 来索引数组,而不是像 BOARD_HEIGHT 和 BOARD_WIDTH 这样的常量,因为在编写时你输出了 grid[12][12] 144 次。
-
您缺少 player.h 和 helper.h。您应该将您的问题缩减为编译和重现问题的最小代码片段。当我运行您的代码时,在添加了一些缺失的代码(我必须弥补)之后,它运行时没有出现段错误。这表明需要提供一个可以自行编译的完整示例,并演示该问题。当我们必须添加自己的代码时,它通常可以正常工作。 :)
标签: c segmentation-fault printf