我如此接近完成这一点,至少我希望如此,因为如果我不是我会疯了。我已经设法摆脱所有的语法和错误摆脱编译器,我启动它希望我最终完成然后......它崩溃......
为了对它的工作方式进行一些概述,假设从“套牌”中打印出五个值 - 然后再次随机将其重新打印(以显示它的混洗)
我太近了。我可以品尝它!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 52
enum faces{Ace = 0, Jack = 10, Queen, King};
char * facecheck(int d);
void shuffle( int deck[]);
void draw(int deck[SIZE]);
void cards(int hand);
int main()
{
int deck[SIZE], i, n;
char suits[4][9] =
{
"Hearts",
"Diamonds",
"Clubs",
"Spades"};
srand( time( NULL ) ) ;
for(i = 0; i<SIZE; i++)
{
deck[i] = i;
i++;
};
draw(deck);
shuffle(deck);
draw(deck);
return 0;
}
char * facecheck(int d)
{
static char * face[] =
{
"Ace",
"Jack",
"Queen",
"King" };
if(d == Ace)
return face[0];
else
{
if(d == Jack)
return face[1];
else
{
if(d == Queen)
return face[2];
else
{
if(d == King)
return face[3];
}
}
}
}
void shuffle( int deck[])
{
int i, j, temp;
for(i = 0; i < SIZE; i++)
{
j = rand() % SIZE;
temp = deck[i];
deck[i] = deck[j];
deck[j] = temp;
}
printf("The deck has been shuffled \n");
}
void draw(int deck[SIZE])
{
int i;
int hand[i];
for(i = 0; i < 5; i++)
{
cards(hand[i]);
putchar('\n');
}
}
void cards(hand)
{
int i;
char suits[4][9] =
{
"Hearts",
"Diamonds",
"Clubs",
"Spades"};
for(i=0; i<SIZE; i++)
{
if(i%13 == 0 || i%13 == 10 || i%13 == 11 || i%13 == 12)
printf("%s ", facecheck(i%13) );
else printf("%d ", i%13+1);
printf("of %s \n", suits[i/13]);
}
}
答案 0 :(得分:2)
它可能会崩溃,因为这里:
for(i = 0; i<SIZE; i++)
{
deck[i] = i;
i++;
};
你增加了两次。
删除i++
行:
for(i = 0; i<SIZE; i++)
{
deck[i] = i;
};
另外,这里:
void draw(int deck[SIZE])
{
int i;
int hand[i];
行int hand[i]
可能会失败,因为我不是常量(它也没有初始化)。
答案 1 :(得分:0)
一些注意事项:
void draw(int deck[SIZE])
{
int i;
int hand[i];
for(i = 0; i < 5; i++)
{
cards(hand[i]);
putchar('\n');
}
}
i
默认情况下没有初始化,并且包含之前该内存地址中的内容,然后你创建一个这个随机长度的数组 - 你的意思是这样做吗?
然后你将手[0],手[1],......,手[4]传递给牌,即使它们未定义。
这可能会导致崩溃。
也许你想要这样的东西:
void draw(int deck[SIZE])
{
int numCards = 5;
int i;
int hand[numCards];
int card;
for(i = 0; i < numCards; i++)
{
card = deck[i]; /* Draw a card */
hand[i] = card; /* Store it in a "hand" array (even though you dont use it) */
cards(card); /* Display info about the card */
}
}
在这里打印出每张卡的整数值,无论你的牌组如何分类。
void cards(hand)
{
int i;
char suits[4][9] =
{
"Hearts",
"Diamonds",
"Clubs",
"Spades"};
for(i=0; i<SIZE; i++)
{
if(i%13 == 0 || i%13 == 10 || i%13 == 11 || i%13 == 12)
printf("%s ", facecheck(i%13) );
else
printf("%d ", i%13+1);
printf("of %s \n", suits[i/13]);
}
}
我认为你不是故意这样做的。我认为你的意思是
void cards(int card)
{
char suits[4][9] =
{
"Hearts",
"Diamonds",
"Clubs",
"Spades"};
if(card%13 == 0 || card%13 == 10 || card%13 == 11 || card%13 == 12)
printf("%s ", facecheck(card%13) );
else
printf("%d ", card%13+1);
printf("of %s \n", suits[card/13]);
}
由于您已经在每张卡上调用此功能,因此没有理由循环使用任何内容。
答案 2 :(得分:0)
for(i = 0; i<SIZE; i++)
{
deck[i] = i;
i++;
};
for-loop中分号的错误?
for(i = 0; i<SIZE; i++)
{
deck[i] = i;
i++; //one of the answer stated to remove this sentence
}