【发布时间】:2016-03-28 09:54:35
【问题描述】:
我目前正在开发一个 C 控制台游戏来学习 C 编程。我有 3 个 .c 文件(player.c game.c board.c)和 3 个 .h 文件(player.h、game.h、board.h)。而game.h包含board.h和player.h,board.h包含player.h。
在 player.h 中,我有以下内容。
typedef enum direction
{
NORTH,
EAST,
SOUTH,
WEST
} Direction;
typedef struct player
{
Position position;
Direction direction;
} Player;
void displayDirection(Direction direction);
void init(Player * player,Direction direction);
所以在这个控制台游戏中,我需要打印不同方向的箭头(北、西、东、南),我已经像这样修改了函数 displayDirection。
if(direction==NORTH){
printf("%s|",DIRECTION_ARROW_OUTPUT_NORTH);
//I already define DIRECTION_ARROW_OUTPUT_NORTH in my .h file.
}
else if(direction==EAST){
printf("%s|",DIRECTION_ARROW_OUTPUT_EAST);
}
else if(direction==SOUTH){
printf("%s|",DIRECTION_ARROW_OUTPUT_SOUTH);
}
else if(direction==WEST){
printf("%s|",DIRECTION_ARROW_OUTPUT_WEST);
}
对于 init() 函数
player->direction=direction;
在 board.c 文件中,我有一个函数可以调用 displayDirection();
void displayBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH], Player * player)
{
for(row=0;row<BOARD_HEIGHT;row++){
for(col=0;col<BOARD_WIDTH;col++){
if(board[row][col]==PLAYER){
displayDirection(player->direction);
}}
printf("\n");
}
最后,在我的 game.c 文件中。我正在使用 scanf 从用户读取输入(方向)并显示它。
Player player;
Direction d;
scanf("%u",&d);
init(&player,d);
displayBoard(board,&player);
我已经测试过了,但是每次我输入方向(比如西),它只给我北方向。我不知道问题出在哪里,我觉得是我的枚举问题,我搜索了枚举类型上网,还是不能解决问题。希望任何人都可以帮助我!
【问题讨论】:
-
enum不是unsigned int -
因此
scanf("%u",&d);没有意义。 -
即使它确实有效(例如,如果您读到
unsigned int),您也必须输入数字而不是名称 (WEST)。 -
scanf()的返回值是多少?