/*

纸牌有四种花色,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;
}

发纸牌问题---多维数组

发纸牌问题---多维数组

相关文章: