所以我已经相当远了一个项目我正在制作,它基本上它写在甲板上的所有卡(工作正常)但当我试图洗牌他们,它崩溃,我真的不知道什么是错的它,因为它洗牌了一些牌(比如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;
}
所以,正如你所见,我不想要任何“重复”,这应该是我猜的顺序,但我希望程序打印出每张卡,但随机,就像一台机器。
我非常感谢任何帮助,因为我现在正在努力工作。
答案 0 :(得分:1)
我看到的问题:
改变颜色的代码
您混合了用于改变颜色和打印卡片的代码。将它们分开。此外,索引的最大值必须为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++) {