Я пытаюсь получить 2 разных типа чисел/цветов, когда я вызываю свою функцию дважды, но это не работает. Я засеял число/функцию, но она все еще не работает.Сгенерировать случайное число не работает при вызове функции дважды
Вот как мой код выглядит:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIAMONDS 0
#define CLUBS 1
#define HEARTS 2
#define SPADES 3
#define JACK 11
#define QUEEN 12
#define KING 13
#define ACE 1
#define COLOR_SIZE 13
#define NR_OF_SUITS 4
#define DECK_SIZE 52
struct Card
{
int suit;
int value;
};
void printCards(struct Card *cardDeck);
void swapCards(struct Card *cardA, struct Card *cardB);
void shuffleCards(struct Card *cardDeck);
void printOneCards(struct Card *cardDeck);
int main()
{
//struct Card deck[DECK_SIZE]; //Statiskt allokerad array
struct Card * deck; //Dynamiskt allokerad array
int index;
int suit_index;
deck = (struct Card *)malloc(sizeof(struct Card) * DECK_SIZE);
for (suit_index = 0; suit_index < NR_OF_SUITS; suit_index++) /* Initiera kortleken */
for (index = 0; index < COLOR_SIZE; index++)
{
deck[suit_index*COLOR_SIZE + index].suit = suit_index;
deck[suit_index*COLOR_SIZE + index].value = index;
}
printCards(deck);
shuffleCards(deck);
printCards(deck);
printf("\n");
printOneCards(deck);
printf("Dealers cards\n");
srand(time(NULL));
printOneCards(deck);
system("pause");
return 0;
}
void printCards(struct Card *cardDeck)
{
for (int i = 0; i < DECK_SIZE; i++)
{
switch (cardDeck[i].value + 1)
{
case ACE: printf("Ace ");
break;
case JACK: printf("Jack ");
break;
case QUEEN: printf("Queen");
break;
case KING: printf("King ");
break;
default: printf("%d ", cardDeck[i].value + 1);
break;
}
printf("of ");
switch (cardDeck[i].suit)
{
case DIAMONDS: printf("Diamonds ");
break;
case HEARTS: printf("Hearts ");
break;
case CLUBS: printf("Clubs ");
break;
case SPADES: printf("Spades ");
break;
default: printf("Something went wrong!! ");
break;
}
printf("\n");
}
}
void swapCards(struct Card * cardA, struct Card *cardB)
{
struct Card temp;
temp = *cardA;
*cardA = *cardB;
*cardB = temp;
}
void shuffleCards(struct Card *cardDeck)
{
srand(time(NULL));
for (int i = 0; i < DECK_SIZE; i++)
swapCards(&cardDeck[i], &cardDeck[rand() % 52]);
}
void printOneCards(struct Card *cardDeck)
{
srand(time(NULL));
for (int i = 0; i < 2; i++)
{
switch (cardDeck[i].value + 1)
{
case ACE: printf("Ace ");
break;
case JACK: printf("Jack ");
break;
case QUEEN: printf("Queen");
break;
case KING: printf("King ");
break;
default: printf("%d ", cardDeck[i].value + 1);
break;
}
printf("of ");
switch (cardDeck[i].suit)
{
case DIAMONDS: printf("Diamonds ");
break;
case HEARTS: printf("Hearts ");
break;
case CLUBS: printf("Clubs ");
break;
case SPADES: printf("Spades ");
break;
default: printf("Something went wrong!! ");
break;
}
printf("\n");
}
}
Так что, когда я звоню функцию printonecards()
, он печатает 2 случайным образом карты и цвета в первый раз, но второй раз я называю, это не так. Как исправить эту проблему и как ее правильно настроить?
@ l3x Вы уверены, что это хороший обман? –
@ l3x Я снова открываю этот вопрос, поскольку отмеченный обман может быть связан, но не является точным ответом на этот вопрос. Дайте мне знать, если вы думаете иначе. :) –
По-прежнему нет ответа, который работает. Пробовал методы ниже, но не работал. – Philly