gpt4 book ai didi

c - fprintf 无法正确显示值

转载 作者:行者123 更新时间:2023-12-02 21:06:17 27 4
gpt4 key购买 nike

我正在尝试代表一款战斗卡牌游戏:

typedef struct list_of_cards* p_loc;
typedef struct game game_s;

struct list_of_cards {
char card[4]; // card is represented like 10C or KS
p_loc ncards; // next card
};

struct game {
p_loc loc; // list of card
p_loc lcard; // last card
};

p_loc init_cards(p_loc loc, int n) {
loc = malloc(sizeof(struct list_of_cards));
scanf("%s", loc->card);
fprintf(stderr, "%s\n", loc->card);
if (n == 1)
return loc;
init_cards(loc->ncards, n-1);
}

int main()
{
int n; // the number of cards for player 1
scanf("%d", &n);
game_s player1;// the n cards of player 1
player1.lcard = init_cards(player1.loc, n);
fprintf(stderr, "%s %s\n", player1.loc->card, player1.lcard->card);
}

第一个 fprintf 给了我我想要的(如 AD KC QC),但第二个显示

�(�� QC

。所以我的问题是,为什么�(��是player1.loc->卡牌值。谢谢

最佳答案

player1.loc->card 是一些奇怪的字符串的原因是它未初始化,并且内存包含随机字符,这些字符并不总是可以在 ascii 中打印。您需要在 init 中修改您的 loc ,以便您可以将您的 loc 作为指向列表第一个元素的指针传递,但最好的方法可能是初始化你将整个玩家构建在一个函数中。

p_loc init_cards(p_loc* loc, int n) {
*loc = malloc(sizeof(struct list_of_cards));
scanf("%s", (*loc)->card);
fprintf(stderr, "%s\n", (*loc)->card);
if (n == 1)
{
(*loc)->ncards = NULL;
return *loc;
}
return init_cards(&((*loc)->ncards), n-1);
}

int main()
{
int n; // the number of cards for player 1
scanf("%d", &n);
game_s player1;// the n cards of player 1
player1.lcard = init_cards(&player1.loc, n);
fprintf(stderr, "%s %s\n", player1.loc->card, player1.lcard->card);
}

关于c - fprintf 无法正确显示值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35849152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com