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); } } }