gpt4 book ai didi

c - 我需要帮助在二十一点、C 中洗牌整数

转载 作者:行者123 更新时间:2023-11-30 17:06:30 24 4
gpt4 key购买 nike

我有三种不同的功能,一种是填充牌组,一种是洗牌,一种是发牌。我已经在函数 fillDeck 中实现了我的 int value 并且工作正常。但是,当我在与 Deck 相同的函数中调整我的值时,它不起作用,我没有收到任何错误,但当我调试 Visual Studio 时,它说它无法读取内存。我做错了什么?

fillDeck函数

void fillDeck(Card * const Deck, const char *suit[], const char *deck[], const int *value[]){

int s;

for (s = 0; s < 52; s++){
Deck[s].suits = deck[s % 13];
Deck[s].decks = suit[s / 13];
Deck[s].value = value[s % 13];
}
return;
}

随机播放功能

void shuffle(Card * const Deck, const int *value[]){
int i, j;
Card temp;

for (i = 0; i < 52; i++){
j = rand() % 52;
temp = Deck[i];
Deck[i] = Deck[j];
Deck[j] = temp;
value[i] = value[j]; // <-- this is not working
}
return;
}

交易功能

void deal(const Card * const Deck, int size, int size_1, int size_2){

int i, j, length;
char anotherCard[2];
char name1[30];
char name2[30];

printf("Name player one > ");
scanf("%s", name1);
printf("Name player two > ");
scanf("%s", name2);

printf("\nWelcome %s and %s, lets begin!\n\n", name1, name2);
getchar();

printf("%s's card:\n", name1);
for (i = 0; i < size; i++){
printf("%5s of %-8s%c", Deck[i].decks, Deck[i].suits, (i + 1) % 2 ? '\t' : '\n');
}
return;
}

主要功能

int main(void){

Card allCards[52];
Card cardValue[52];
char *suitname[] = { "spades", "hearts", "diamonds", "clubs" };
char *deckname[] = { "ace", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "jack", "queen", "king" };
int cardvalue[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 };

srand(time(NULL));

fillDeck(allCards, suitname, deckname, cardvalue);
shuffle(allCards, cardValue);
deal(allCards, 2, 4, 6);


getchar();
return 0;
}

func.h文件

#ifndef FUNC_H
#define FUNC_H

typedef struct card{
const char *suits;
const char *decks;
int value;
};

typedef struct card Card;

void fillDeck(Card * const Deck, char *suit[], char *deck[], const int *value[]);

void shuffle(Card * const Deck, const int *value[]);

void deal(const Card * const Deck, int size, int size_1, int size_2);

#endif

最佳答案

由于 value 是结构 Card 的一部分,因此单独洗牌 Cards 数组就足够了。我看不到你的完整代码,但我认为不需要洗牌任何“值”。像这样调整你的函数shuffle

void shuffle( Card * const Deck ){
for (int i = 0; i < 52; i++){
int j = rand() % 52;
Card temp = Deck[i];
Deck[i] = Deck[j];
Deck[j] = temp;
}
return;
}

根据此更改,您的函数deal如下所示:

void deal(const Card * const Deck, int size, int size_1, int size_2) {
...
printf("%s's card:\n", name1);
for (i = 0; i < size; i++){
printf to printf("%5s of %-8s %d %d", Deck[i].decks, Deck[i].suits, Deck[i].value, (i + 1) % 2 ? '\t' : '\n');
// ^^^^^^^
}
...
}

除此之外,您还必须将函数 fillDeck 的第四个参数的类型从 const int *value[] 更改为 const int value[] ,因为 cardvalueint 数组,而不是 int* 数组

void fillDeck(Card * const Deck, const char *suit[], const char *deck[], const int value[] );
// ^

关于c - 我需要帮助在二十一点、C 中洗牌整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34660657/

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