rand()函数的问题
题目是写一个扑克牌的发牌程序,并按照打牌的规则对手中的牌排序输出。我设计成斗地主的发牌,想用rand函数来做。结果。。。。。。每位玩家手里都有好多炸弹。。。就像牌没有洗开一样。我实在是不清楚是我程序的问题,还是rand函数本身存在缺陷了。。求助啊。。。拜托各位了

程序代码:#include "stdio.h"
#include "stdlib.h"
#include "time.h"
///发牌函数/////////这里肯定有问题,不然不会满手的炸弹
void deal_poker(int num[],int poker[])
{
int rand_num;
for(int i=0;i<18;i++)
{
srand((int)time(0));
rand_num=(rand())%15;
while(4==num[rand_num])
{
srand((int)time(0));
rand_num=(rand())%15;//对随机得到的数字所代表的牌已发出的情况进行处理
}
num[rand_num]++;
switch(rand_num)//按照斗地主规则中牌的大小对poker赋值,以便排序
{
case 0:poker[i]=14;break;
case 1:poker[i]=15;break;
case 13:poker[i]=16;break;
case 14:poker[i]=17;break;
default:poker[i]=rand_num+1;break;
}
}
}
///排序函数
void rank(int poker[])
{
int temp,k;
for(int i=0;i<18;i++)
{
k=i;
for(int j=i+1;j<18;j++)
{
if(poker[j]<poker[k])k=j;
}
if(k!=i)
{
temp=poker[k];
poker[k]=poker[i];
poker[i]=temp;
}
}
}
///输出函数
void print(int poker[])
{
for(int i=0;i<18;i++)
{
switch(poker[i])
{
case 11:printf("%7s","J");break;
case 12:printf("%7s","Q");break;
case 13:printf("%7s","K");break;
case 14:printf("%7s","Ace");break;
case 15:printf("%7s","2");break;
case 16:printf("%7s","Joker1");break;
case 17:printf("%7s","Joker2");break;
default:printf("%7d",poker[i]);break;
}
if(0==(i+1)%6)printf("\n");
}
printf("\n");
}
void main()
{
char s;
int num[15]={0};//记录每种牌的个数(为了区分大小王所以用了15个种类)
int poker[18]={0};//记录手牌
num[13]=3;
num[14]=3;
printf("说明:\n手牌按照多地主的规则从小到大排序Joker1代表大王,Joker2代表小王,请输入s开始发牌\n");
while(EOF!=scanf("%c",&s))
{
for(int i=0;i<3;i++)
{
printf("玩家%d的手牌:\n",i+1);
deal_poker(num,poker);
rank(poker);
print(poker);
}
}
}









