我这个发牌程序哪里错了,单步调的结果和运行的不一样,求高手指点
#include<stdio.h>#include<stdlib.h>
#include<time.h>
typedef struct{
int x;//代表花色
int y;//代表牌的符号
}Node;
void random(int M[][13],int *a,int *b);
void Deal(Node num[][13],int Mark[][13]);
void Print(Node Num[][13]);
void color(int j);
void random(int M[][13],int *a,int *b)//产生随机牌
{
srand((unsigned)time(NULL));
*a=rand()%4;
*b=rand()%13;
if(M[*a][*b]!=0)
{
*a=rand()%4;
*b=rand()%13;
M[*a][*b]=1;//标记
}
M[*a][*b]=1;
}
void Deal(Node num[][13],int Mark[][13])//发牌函数
{
int a,b;
int i;
Node *p;
static j=0;
for(i=0;i<13;i++)//发13张牌
{
random(Mark,&a,&b);
p=(Node *)malloc(sizeof(Node));
p->x=a;
p->y=b;
num[j][i]=*p;
}
j++;
while(j<4)
{
Deal(num,Mark);
}
}
void color(int j)//1代表黑桃6,2代表红桃,3代表方块,4代表梅花
{
switch(j)
{
case 0:printf("%c ",6);break;
case 1:printf("%c ",3);break;
case 2:printf("%c ",4);break;
case 3:printf("%c ",5);break;
default:break;
}
}
void printNum(int n)//转换数字为牌的符号
{
if(n>=1&&n<=9)
printf("%d ",n+1);
if(n==10)
printf("J ");
if(n==11)
printf("Q ");
if(n==12)
printf("K ");
if(n==0)
printf("A ");
}
void Print(Node Num[][13])//打印
{
int i,j,k;
int w[13],e[13],r[13],t[13];//分别存黑桃,红桃,方块,梅花
int Number=1;//4个人
int z=0,x=0,c=0,v=0;
for(i=0;i<4;i++)
{
z=0,x=0,c=0,v=0;
for(j=0;j<13;j++)//把每个人的牌按花色分组
{
if(Num[i][j].x==0)
w[z++]=Num[i][j].y;
if(Num[i][j].x==1)
e[x++]=Num[i][j].y;
if(Num[i][j].x==2)
r[c++]=Num[i][j].y;
if(Num[i][j].x==3)
t[v++]=Num[i][j].y;
}
w[z]=0;
e[x]=0;
r[c]=0;
t[v]=0;
printf("第%d个人的牌为\n",Number);
Number++;
color(0);//打印花色
k=0;
while(w[k]!='\0')
{
printNum(w[k]);
w[k]=0;//恢复数组状态
k++;
}
printf("\n");
color(1);
k=0;
while(e[k]!='\0')
{
printNum(e[k]);
e[k]=0;
k++;
}
printf("\n");
color(2);
k=0;
while(r[k]!='\0')
{
printNum(r[k]);
r[k]=0;
k++;
}
printf("\n");
color(3);
k=0;
while(t[k]!='\0')
{
printNum(t[k]);
t[k]=0;
k++;
}
printf("\n");
}
}
int main()
{
Node Num[4][13];//定义分4组13张牌
int i;
int mark[4][13]={0};//为发过的牌做标记
Deal(Num,mark);//发牌函数
Print(Num);//打印
}