- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我在做一个项目时已经走了很远,它基本上是将所有卡片写入一副牌的地方(工作正常)但是当我尝试洗牌时,它崩溃了,我实际上不知道有什么问题它,因为它洗了一些牌(比如 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/
我已经创建了我的牌组,可以处理每张牌和一套花色,直到没有牌为止。对于我的项目,我需要将它分成 3 个类,其中包括一个驱动程序类。我首先创建了一个包含所有内容的类,所以我知道如何让它全部工作。 publ
嘿伙计们,我正在学习我的第一个 Java 类(class),但在尝试编译该程序时遇到了错误代码。我附加了这两门类(class),希望他能帮助我找到错误。这是我收到的错误: Error: constru
这个问题在这里已经有了答案: How to randomly shuffle a deck of cards among players? (3 个答案) 关闭 4 年前。 我一直在尝试学习 Pyt
我是一名优秀的程序员,十分优秀!