/*
纸牌有四种花色,13个点数,如何随机发几张纸牌???
*/
#include <stdio.h>
#include <stdlib.h> //使用库函数srand和rand#include <time.h> //使用库函数time
#include <string.h> //使用库函数strcpy和stract
#include<malloc.h> //使用malloc等库函数实现动态存储分配
char *str1[4] = {"梅花","黑桃","红桃","方块"}; //全局变量使用花色
char *str2[13] = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; //点数
char *card[54]; //全局变量存储随机产生的纸牌,假设最多发13张牌
void SendCards(int n)
{
int sign[4][13] = {0}; //初始化标志数组,所有牌均未发出
int k,i,j;
srand(time(NULL)); //初始化随机种子为当前系统时间
for(k = 0;k<n;)
{
i = rand()%4; //随机生成花色下标
j = rand()%13; //随机生成点数下标
if(sign[i][j] == 1) //这张牌已发出
continue; //跳出=过循环体余下句,注意k的值不变
else{
card[k] = (char*)malloc(6); //存储一张牌需要6个字节
strcpy(card[k],str1[i]); //字符串赋值,card[k] = str1[i]
strcat(card[k],str2[j]); //字符串连接,card[k]=card[k]+str2[j]
sign[i][j] = 1;
k++; //准备发下一张牌
}
}
}
void Printcards(int n)
{
for(int k = 0;k<n;k++) //依次输出每一张牌
printf("%-10s",card[k]); //宽度10位左对齐输出第k张牌
printf("\n");
}
int main()
{
int n;
printf("请输入发牌张数:");
scanf("%d",&n);
do{
printf("输入有误!请重新输入:");
scanf("%d",&n);
}while(n<0||n>52);
SendCards(n);
Printcards(n);
/*判断是否输入正确*/
/*
if(n>0||n<53)
{
SendCards(n);
Printcards(n);
}else{
printf("输入有误!");
}
*/
return 0;
}