作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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/
我是一名优秀的程序员,十分优秀!