gpt4 book ai didi

c - 为什么抽卡直到到达 "A Spade"时会输出不同的结果

转载 作者:行者123 更新时间:2023-11-30 16:07:37 25 4
gpt4 key购买 nike

在 do-while 循环中,必须抽出一张新牌,直到它不满足要求为止。当牌是“A Spade”时,我们应该将其添加到牌堆中,然后停止抽随机牌。有时输出完成与“黑桃”,但有时它是一些不同的卡类型。我相信代码有问题。

#define _CRT_SECURE_NO_WARNINGS

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

const char const available_values[13] =
{
'2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A'
};

const char* const available_paints[4] =
{
"club", "diamond", "heart", "spade"
};

typedef struct card_t
{
char value;
char* paint;
} Card;

void initialize_card(Card* card)
{
int value_index = rand() % 13;
int paint_index = rand() % 4;

card->value = available_values[value_index];
card->paint = available_paints[paint_index];
}

Card* card_draw()
{
Card card;
initialize_card(&card);

return &card;
}

int main() {
srand((unsigned int)time(NULL));
unsigned count = 0;
Card* card;
Card* old_deck = NULL;
Card* new_deck;
do {
new_deck = old_deck;
count++;
old_deck = calloc(count, sizeof(Card));
if (!old_deck) {
printf("Memory allocation error");
break;
}
for (unsigned i = 0; i < count-1; i++) {
old_deck[i] = new_deck[i];
free(new_deck);
}
card = card_draw();
old_deck[count-1] = *card;

printf("%c %s\n\n", card->value, card->paint);

} while (card->value != 'A' && card->paint != "Spade");

return 0;
}

新版本:

Constant.h:https://pastebin.com/av9pBabk

Main.cpp:https://pastebin.com/jJttNWjj

希望对大家有用,谢谢大家!

最佳答案

Card* card_draw()
{
Card card;
initialize_card(&card);

return &card;
}

这个函数的返回值是没有用的。这是的地址。但是,一旦函数返回,card 就不再存在,因为它是函数的本地函数。所以这个函数的返回值不能使用。

    card = card_draw();
old_deck[count-1] = *card;

糟糕,您取消引用从 card_draw 返回的指针,但它指向一个不再存在的对象,因此无法取消引用。

要么让这个函数按值返回一个Card而不是指针,要么在调用者中创建对象并将其地址传递给这个函数。

关于c - 为什么抽卡直到到达 "A Spade"时会输出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59589492/

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