链接列表卡,只有51张卡出现不是52

时间:2017-03-20 01:36:06

标签: c++ linked-list

我在这个程序中正在做的是我随机创建一个包含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];
    }

1 个答案:

答案 0 :(得分:0)

阅读完代码后,我发现为什么你有51张卡。在第一个for循环中创建卡值时,您将第一个节点分配给名为&#34; start&#34;的变量。而在打印时,你只是在穿越&#34; temp&#34;没有&#34;开始&#34; 。你在列表中开始少一个元素的原因不在列表中