我目前正在开发一款用于学习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);
所以在这个控制台游戏中,我需要在不同的方向(NORTH,WEST,EAST,SOUTH)打印箭头,我已经像这样修改了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);
我测试了它,但是每次我进入方向(例如WEST)时,它只给我北方向。我不知道问题出在哪里,我觉得这是我的问题,我搜索过枚举类型在线,仍然无法解决问题。希望有人能帮助我!
答案 0 :(得分:0)
问题原因
在行scanf("%u",&d);
中,您假设enum
类型和unsigned int
类型是可互换的,但这不是真的。
可能的修复
制作辅助功能以进行方向输入。在这里,您可以将用户输入读作int
或c string
,并可将其映射到enum
类型。
Direction getDirection(void) {
int d = 0;
static const Direction mapping[] = {NORTH, EAST, SOUTH, WEST};
do {
if(0 != d) fprintf(stderr, "%s\n", "***ERROR*** Bad input, ignored");
printf("Enter direction 0:N, 1:E, 2:S, 3:W\n");
scanf("%d", &d);
} while(d < 0 || d > 3);
return mapping[d];
}
后来:
Direction d = getDirection();