我正在嘗試編寫一個隨機數字,介於1和14之間(代表一副撲克牌)。代碼應將值存儲在數組中,限制爲52.每個數字只能存儲4次(因爲一副牌中有4套)。所以,最後,我應該爲person_a和person_b顯示兩個隨機化套牌。在C中隨機化數字並將它們存儲在整數數組中
我的問題是person_a和person_b的隨機化套牌是一樣的。我不知道爲什麼。我嘗試使用srand()進行播種,並使用rand()作爲隨機數。有人可以幫忙嗎?
此外,我知道我的代碼非常混亂和可怕。對不起 - 這是我第一次參加C課程。下面是代碼:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define MAX_DECK 52
#define REPETITIONS 4
#define CARDS_HIGH 14
#define CARDS_LOW 1
int
randomize_check(int value_check, int limit, int cards[])
{
int count = 0;
int i = 0;
for(i=0; i<limit; i++)
{
if(cards[i]==value_check)
{
count++;
}
}
if(count>REPETITIONS)
{
return -1;
}
else if (count<=REPETITIONS)
{
return 1;
}
}
int
get_random(void)
{
int random_number = 0;
random_number = (rand()%(CARDS_HIGH-CARDS_LOW))+CARDS_LOW;
return(random_number);
}
int * randomize_deck(void)
{
static int cards[MAX_DECK];
int i = 0;
int randomize = 0;
int check = 0;
for (i=0; i<MAX_DECK; i++)
{
randomize = get_random();
cards[i] = randomize;
check = randomize_check(cards[i], MAX_DECK, cards);
while((check) == -1)
{
randomize = get_random();
cards[i] = randomize;
check = randomize_check(cards[i], MAX_DECK, cards);
}
}
return(cards);
}
int
main(void)
{
srand (time(NULL));
int i = 0, j = 0;
int *person_a = randomize_deck();
int *person_b = randomize_deck();
for (i = 0; i < MAX_DECK; i++) //print_a
{
printf("Cards[a%d]: %d\n", i, *(person_a + i));
}
printf("\n");
for (j = 0; j < MAX_DECK; j++) //print_b
{
printf("Cards[b%d]: %d\n", j, *(person_b + j));
}
return(0);
}
爲什麼你的問題標記爲'C++'? – Siguza
因爲你已經將'cards'聲明爲'static'數組。 –
@DavidBowling謝謝!你會如何建議我解決這個問題? –