gpt4 book ai didi

c - 洗一副纸牌,莫名其妙地崩溃了?

转载 作者:行者123 更新时间:2023-12-05 01:28:40 24 4
gpt4 key购买 nike

所以我在做一个项目时已经走了很远,它基本上是将所有卡片写入一副牌的地方(工作正常)但是当我尝试洗牌时,它崩溃了,我实际上不知道有什么问题它,因为它洗了一些牌(比如 3),然后崩溃了。另外,现在做,我只做了12张卡片,有什么简单的方法吗。

到目前为止,这是我的代码

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

#define ACE 14
#define JACK 11
#define QUEEN 12
#define KING 13

int main()

{
int cards[14];
int temp;
int i;
int random;
int j;
char *color[] = { "Heart","Diamond","Spade","Clubs"};

for (j = 0; j < 4; j++){
for (i = 1; i < 14; i++) {
cards[i] = i + 1;
switch (cards[i]) {
case ACE: printf("Ace");
break;
case JACK: printf("Jack");
break;
case QUEEN: printf("Queen");
break;
case KING: printf("King");
break;
default: printf("%d", cards[i]);
}
if (j == 0) {
printf(" of %s\n", color[0]);
}
else;
if (j == 1) {
printf(" of %s\n", color[1]);
}
else;
if (j == 2) {
printf(" of %s\n", color[2]);
}
else;
if (j == 3) {
printf(" of %s\n", color[3]);
}
}
}

printf("\n----------------------------\n");
srand(time(NULL));

//The above works fine, its below where the problem is

for (i = 1; i < 13; i++) {
random = (rand() % 13 + 1);
temp = cards[i];
cards[i] = cards[random];
cards[random] = temp;
}
char *testcolor[64];
char m;
for (i = 0; i < 14; i++) {
m = rand() % 4;
*testcolor = color[i];
color[i] = color[m];
color[m] = *testcolor;

for (i = 1; i < 14; i++) {
printf("%d %s\n", cards[i], color[i]);
}
}

system("pause");
return 0;


}

所以,如您所见,我不想要任何“重复”,我猜应该是按顺序排列的,但我希望程序随机打印出每张卡片,就像机器一样。

我真的很感激任何帮助,因为我现在很挣扎。

最佳答案

我看到的问题:

打乱颜色的代码

您混合了洗牌和打印卡片的代码。把他们分开。另外,索引的最大值需要是3,而不是13

for (i = 0; i < 4; i++) {
// ^^ Needs to be 4, not 14.
m = rand() % 4;
*testcolor = color[i];
color[i] = color[m];
color[m] = *testcolor;
}

另外,我不清楚你为什么需要:

char* testcolor[64];

您在交换指针时将其用作临时变量。它可以只是:

char* testcolor;

然后,交换代码需要更改为:

testcolor = color[i];
color[i] = color[m];
color[m] = testcolor;

打印代码

您需要两个循环,而不是一个循环。您需要一个索引用于卡片,另一个索引用于颜色。

for (i = 1; i < 14; i++) {
for (j = 0; j < 4; j++) {
printf("%d %s\n", cards[i], color[j]);
}
}

其他

您已将 m 定义为 char 类型。我从 gcc 收到以下警告:

warning: array subscript has type ‘char’ [-Wchar-subscripts]

可以

int m;

避免该警告。

在用于洗牌的循环中,您有:

for (i = 1; i < 13; i++) {

它不是必须的,但它可以是:

for (i = 1; i < 14; i++) {

关于c - 洗一副纸牌,莫名其妙地崩溃了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34347969/

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