我在这个程序中正在做的是我随机创建一个包含52张卡片的链表,然后显示它们。但是,当我编译所有这些是51卡,我似乎无法弄清楚为什么总有一张卡丢失。任何帮助将不胜感激。
struct card
{
int cardvalue;
card *next;
};
int main()
{
srand(time(NULL));
int i,j=0,q,tempo=0, z,temp2=0,temp3=0,x,num1,num2=0,t, count=0, label=1,face=0,suit=0, m, count2=0;
char suits[4]={'C','D','H','S'};
char ranks[13]={'2','3','4','5','6','7','8','9','T','J','Q','K','A'};
card *start=NULL,*ptr,*temp;
int prevdrawnnum[52];
for(x=0; x<52; x++)
{
prevdrawnnum[x]=0;
}
for(t=0; t<52; t++)
{
num1=rand()%52;
if(prevdrawnnum[num1]==1){
while(prevdrawnnum[num1]==1){
num1=rand()%52;
}
}
prevdrawnnum[num1]=1;
ptr = new card;
ptr->cardvalue=num1;
ptr->next=NULL;
if(start==NULL)
start=ptr;
else
{
temp=start;
while(temp->next!=NULL)
temp=temp->next;
temp->next=ptr;
}
count++;
}
temp=start;
while(temp->next!=NULL)
{
num2=temp->cardvalue;
suit=num2%4;
face=num2/4;
cout<<label<<". "<<ranks[face]<<"-"<<suits[suit]<<endl; //prints the shuffled decks
label++;
temp=temp->next;
}
cout<<count<<endl;
for(tempo=0; tempo<52; tempo++)
{
cout<<prevdrawnnum[tempo];
}
答案 0 :(得分:0)
阅读完代码后,我发现为什么你有51张卡。在第一个for循环中创建卡值时,您将第一个节点分配给名为&#34; start&#34;的变量。而在打印时,你只是在穿越&#34; temp&#34;没有&#34;开始&#34; 。你在列表中开始少一个元素的原因不在列表中