想问一下,下面这个程序错在哪里。为什么不能实现排序功能,为什么会得到这样的错误结果。在设想中,应该实现每13位排序,但是运行出来却不是。初学者实在想不通了,希望有人解答一下我的疑惑。
一付桥牌共52张牌,有四种花色,从大到小依次为:黑桃、 红桃、 方块、草花;每一种花色有十三张牌,顺序如下:A(最大)、K、Q、J、10、9、8、7、6、5、4、3、2(最小)。编写程序,实现将一付牌平均分发到4个玩家手中,按花色及牌点大小整理为有序并输出。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
void sort(int p)
{
int i=0,j=0;
for(i=0;i<13;i++)
{
for(j=0;j<13-i;j++)
{
if(*(p+j)>(p+j+1))
{
swap((p+j),(p+j+1));
}
}
}
}
//0-12表示 黑桃
//13-25 红桃
//26-38 方块
//39-51 草花
int main(void)
{
int card[52];
int *p=card;
int i=0;
int t;
srand(time(0));
for(i=0;i<52;i++)
{
card[i]=i;
}
//洗牌
for(i=0;i<52;i++)
{
t=rand()%(52-i);
swap(&card[i],&card[i+t]);
}
//输出:
for(i=0;i<52;i++)
{
if(i%13==0)
{
if(i/13)
{
printf("\n");
}
printf("Person %d:",i/13+1);
}
printf(" ");
//输出花色
sort(p);
sort(p+13);
sort(p+26);
sort(p+39);
switch(card[i]/13)
{
case 0:printf("黑桃");break;
case 1:printf("红桃");break;
case 2:printf("方块");break;
case 3:printf("草花");break;
default:break;
}
//输出牌(2-10,j,q,k,A)
if(card[i]%13>=9)
{
switch(card[i]%13)
{
case 9:printf("J");break;
case 10:printf("Q");break;
case 11:printf("K");break;
case 12:printf("A");break;
default:break;
}
}
else
{
printf("%d",card[i]%13+2);
}
}
return 0;
}