C언어/Homework

[C언어] Card 정렬(숫자 순 - 무늬 순)

달의요정루나 2022. 3. 21. 00:00
#include<stdio.h>
#include <stdlib.h>
#include <time.h>

struct card
{
	int face; //숫자
	int suit; //무늬
};

typedef struct card CARD;

void init_deck(CARD arr[]);
void shuffle_deck(CARD arr[]);
void print_card(CARD* c);
void print_deck(CARD arr[]);
void sort(CARD arr[]);

int main()
{
	CARD deck[52];

	init_deck(deck);
	
	shuffle_deck(deck);
	print_deck(deck);
	printf("\n");

	sort(deck);
	print_deck(deck);
	printf("\n");

	return 0;
}

void init_deck(CARD arr[]) //초기의 카드상태를 출력한다.
{							//숫자 13개, 무늬 4개를 섞어놓는다.
	int i, face, suit;
	
	i = 0;
	for ( suit = 0; suit < 4; suit++)
	{
		for ( face = 1; face <= 13; face++)
		{
			arr[i].suit = suit;
			arr[i].face = face;
			i++;
		}
	}
}

void shuffle_deck(CARD arr[]) //숫자 13개와 무늬 4개의 카드를 뒤섞는다.
{							// rand()을 이용해 랜덤으로 뒤섞으면 된다.
	int first, second;
	CARD s;

	srand(time(NULL));
	for ( first = 0; first < 52; first++)
	{
		second = rand() % 52;
		s = arr[first];
		arr[first] = arr[second];
		arr[second] = s;
	}
}

void print_card(CARD* c) //숫자와 모양카드들을 출력시킨다.
{
	char* faces[] = { "","A","2","3","4","5","6","7","8","9","10","J","Q","K" };
	char* suits[] = { "Hearts","Diamond","Clubs","Spades" };
	printf("%s-%s \t", faces[c->face], suits[c->suit]);
}

void print_deck(CARD arr[]) //숫자와 모양을 한 벌의 카드로 출력한다.
{
	int i;
	for ( i = 0; i < 52; i++)
	{
		print_card(&arr[i]); //print_card() 함수를 이용했다.
		if (i % 4 == 3) {
			printf("\n");
		}
	}
}

void sort(CARD arr[]) //첫번째 기준 숫자와 두번째 기준(숫자가 동일할 때) 무늬로 카드를 정렬한다.
{
	int i, j, index = 0;

	for ( i = 1; i <= 13; i++)
	{
		for ( j = 0; j < 4; j++)
		{
			arr[index].face = i;
			arr[index].suit = j;
			index++;
		}
	}
}

결과