注册 登录
编程论坛 C++教室

为什么会不能运行出结果啊??求修改啊???

smile康师傅 发布于 2012-12-09 01:50, 445 次点击
#include<iostream>
#include<cstdlib>
using namespace std;
const int size=54;
struct Card{
    Card(){flag=false;num=0;}
    bool flag;
    int num;//牌的大小--------------整形数据比较容易比较
};
class Deck
{
    public:
        Deck():n(3){}
        void riffle();//洗牌;
        void deal();//发牌;
        void display(Card [],int n);//显示玩牌者手中的牌
        Card* getcard(){Card*p;p=card;return p;}//返回数组card[size];
        bool judgecard();//判断数组中的所有数据均被赋值过
    private:
        Card card[size];
        const int n;//玩牌人数
};
Card farmer1[17];//农民
Card farmer2[17];//农民
Card landlord[20];//地主
bool judge(int num);//判断数字是否大于十
void Deck::riffle()
{
    int i,j,k;
L1:
    for(i=3;i<=17;i++)
    {
        if(i==16||i==17)//区分大小王
        {
            k=rand()%size;
            card[k].num=i;
            card[k].flag=true;
        }
        else
        {
            for(j=1;j<=4;j++)//4个3,4个4,4个5。。。
            {
                head:
                k=rand()%size;
                if(card[k].flag==true)
                    goto head;
                else
                {
                    card[k].num=i;
                    card[k].flag=true;
                }
            }
        }
    }
    if(!judgecard())//-------------------------不调用这个语句怎样确认所有的牌都被赋值过啊????
        goto L1;
}
void Deck::deal()//发牌
{
    int i,j;
    for(i=j=0;i<size;i++,j++)
    {
        if(j<17)//按一定的顺序发牌
        {
            farmer1[j]=card[i];
            farmer2[j]=card[++i];
            landlord[j]=card[++i];
        }
        else
            landlord[j]=card[i];//最后三张牌
    }
}
void Deck::display(Card farmer[],int n)//显示玩牌者手中的牌
{
    int i;
    for(i=0;i<n;i++)
    {
        if(judge(farmer[i].num))
            cout<<farmer[i].num<<'\t';
        else
        {
            if(farmer[i].num==11)
                cout<<'J'<<'\t';
            else if(farmer[i].num==12)
                cout<<'Q'<<'\t';
            else if(farmer[i].num==13)
                cout<<'K'<<'\t';
            else if(farmer[i].num==14)
                cout<<'A'<<'\t';
            else if(farmer[i].num==15)
                cout<<'2'<<'\t';
            else if(farmer[i].num==16)//小王
                cout<<"jk"<<'\t';
            else
                cout<<"Jk"<<'\t';//大王
        }
    }
}
bool judge(int n)//判断数字是否大于十
{
    if(n<=10)
        return true;
    else
        return false;
}
bool Deck::judgecard()
{
    int i;
    for(i=0;i<size;i++)
    {
        if(card[i].flag==true)
            continue;
        else
            break;
    }
    if(i>=size)
        return true;
    else
        return false;
}
void main()
{
    Deck deck;
    deck.riffle();
    deck.deal();
    cout<<"*********洗牌后的结果为********:\n";
    deck.display(deck.getcard(),size);
    cout<<"\n*********发牌后********:\n";
    cout<<"\nfarmer1:\n";
    deck.display(farmer1,17);
    cout<<"\nfarmer2:\n";
    deck.display(farmer2,17);
    cout<<"\nlandlord:\n";
    deck.display(landlord,20);
}
为什么程序执行不出来结果啊????
4 回复
#2
w5277050902012-12-09 18:28
帮顶啦 !!这个问题我回答不了。。。
#3
qunxingw2012-12-09 20:07
1
#include<iostream>
#include<time.h>
//#include<cstdlib>
using namespace std;
const int size=54;
struct Card{
    Card(){flag=false;num=0;}
    bool flag;
    int num;//牌的大小--------------整形数据比较容易比较
};
class Deck
{
    public:
        Deck():n(3){}
        void riffle();//洗牌;
        void deal();//发牌;
        void display(Card [],int n);//显示玩牌者手中的牌
        Card* getcard(){Card*p;p=card;return p;}//返回数组card[size];
        bool judgecard();//判断数组中的所有数据均被赋值过
    private:
        Card card[size];
        const int n;//玩牌人数
};
Card farmer1[17];//农民
Card farmer2[17];//农民
Card landlord[20];//地主
bool judge(int num);//判断数字是否大于十
void Deck::riffle()
{
     srand(time(NULL));

    int i,j,k;
//L1:
    for(i=3;i<=17;i++)
    {
        if(i==16||i==17)//区分大小王
        {
           L1:
            k=rand()%size;
           if(card[k].flag==true)
               goto L1;//防止大小王占用前面产生的牌。
            card[k].num=i;
            card[k].flag=true;
        }
        else
        {
            for(j=1;j<=4;j++)//4个3,4个4,4个5。。。/*还有1--2个0的问题应该在此解决
            {
                head:
                k=rand()%size;
                if(card[k].flag==true)
                    goto head;
                else
                {
                    card[k].num=i;
                    card[k].flag=true;               
               }
            }
        }
    }
   // if(judgecard())//-------------------------不调用这个语句怎样确认所有的牌都被赋值过啊????
       // goto L1;
}
void Deck::deal()//发牌
{
    int i,j;
    for(i=j=0;i<size;i++,j++)
    {
        if(j<17)//按一定的顺序发牌
        {
            farmer1[j]=card[i];
            farmer2[j]=card[++i];
            landlord[j]=card[++i];
        }
        else
            landlord[j]=card[i];//最后三张牌
    }
}
void Deck::display(Card farmer[],int n)//显示玩牌者手中的牌
{
    int i;
    for(i=0;i<n;i++)
    {
        if(judge(farmer[i].num))
            cout<<farmer[i].num<<'\t';
        else
        {
            if(farmer[i].num==11)
                cout<<'J'<<'\t';
            else if(farmer[i].num==12)
                cout<<'Q'<<'\t';
            else if(farmer[i].num==13)
                cout<<'K'<<'\t';
            else if(farmer[i].num==14)
                cout<<'A'<<'\t';
            else if(farmer[i].num==15)
                cout<<'2'<<'\t';
            else if(farmer[i].num==16)//小王
                cout<<"jk"<<'\t';
            else
                cout<<"Jk"<<'\t';//大王
        }
    }
}
bool judge(int n)//判断数字是否大于十
{
    if(n<=10)
        return true;
    else
        return false;
}
/*bool Deck::judgecard()
{
    int i;
    for(i=0;i<size;i++)
    {
        if(card[i].flag==true)
            continue;
        else
            break;
    }
    if(i>=size)
        return true;
    else
        return false;
}*/
void main()
{
    Deck deck;
    deck.riffle();
    deck.deal();
    cout<<"*********洗牌后的结果为********:\n";
    deck.display(deck.getcard(),size);
    cout<<"\n*********发牌后********:\n";
    cout<<"\nfarmer1:\n";
    deck.display(farmer1,17);
    cout<<"\nfarmer2:\n";
    deck.display(farmer2,17);
    cout<<"\nlandlord:\n";
    deck.display(landlord,20);
}


[ 本帖最后由 qunxingw 于 2012-12-13 23:02 编辑 ]
#4
刘宇2012-12-09 23:17
帮忙顶一下,大神贴。。。
#5
qunxingw2012-12-13 23:06
#include<iostream>
#include<time.h>
//#include<cstdlib>
using namespace std;
const int size=54;
struct Card{
    Card(){flag=false;num=0;}
    bool flag;
    int num;//牌的大小--------------整形数据比较容易比较
};
class Deck
{
    public:
        Deck():n(3){}
        void riffle();//洗牌;
        void deal();//发牌;
        void display(Card [],int n);//显示玩牌者手中的牌
        Card* getcard(){Card*p;p=card;return p;}//返回数组card[size];
        bool judgecard();//判断数组中的所有数据均被赋值过
    private:
        Card card[size];
        const int n;//玩牌人数
};
Card farmer1[17];//农民
Card farmer2[17];//农民
Card landlord[20];//地主
bool judge(int num);//判断数字是否大于十
void Deck::riffle()
{
     srand(time(NULL));

    int i,j,k;
//L1:
    for(i=3;i<=17;i++)
    {
        if(i==16||i==17)//区分大小王
        {
           L1:
            k=rand()%size;
           if(card[k].flag==true)
               goto L1;//防止大小王占用前面产生的牌。
            card[k].num=i;
            card[k].flag=true;
        }
        else
        {
            for(j=1;j<=4;j++)//4个3,4个4,4个5。。。/*还有1--2个0的问题应该在此解决
            {
                head:
                k=rand()%size;
                if(card[k].flag==true)
                    goto head;
                else
                {
                    card[k].num=i;
                    card[k].flag=true;               
               }
            }
        }
    }
   // if(judgecard())//-------------------------不调用这个语句怎样确认所有的牌都被赋值过啊????
       // goto L1;
}
void Deck::deal()//发牌
{
    int i,j;
    for(i=j=0;i<size;i++,j++)
    {
        if(j<17)//按一定的顺序发牌
        {
            farmer1[j]=card[i];
            farmer2[j]=card[++i];
            landlord[j]=card[++i];
        }
        else
            landlord[j]=card[i];//最后三张牌
    }
}
void Deck::display(Card farmer[],int n)//显示玩牌者手中的牌
{
    int i;
    for(i=0;i<n;i++)
    {
        if(judge(farmer[i].num))
            cout<<farmer[i].num<<'\t';
        else
        {
            if(farmer[i].num==11)
                cout<<'J'<<'\t';
            else if(farmer[i].num==12)
                cout<<'Q'<<'\t';
            else if(farmer[i].num==13)
                cout<<'K'<<'\t';
            else if(farmer[i].num==14)
                cout<<'A'<<'\t';
            else if(farmer[i].num==15)
                cout<<'2'<<'\t';
            else if(farmer[i].num==16)//小王
                cout<<"jk"<<'\t';
            else
                cout<<"Jk"<<'\t';//大王
        }
    }
}
bool judge(int n)//判断数字是否大于十
{
    if(n<=10)
        return true;
    else
        return false;
}
/*bool Deck::judgecard()
{
    int i;
    for(i=0;i<size;i++)
    {
        if(card[i].flag==true)
            continue;
        else
            break;
    }
    if(i>=size)
        return true;
    else
        return false;
}*/
void main()
{
    Deck deck;
    deck.riffle();
    deck.deal();
    cout<<"*********洗牌后的结果为********:\n";
    deck.display(deck.getcard(),size);
    cout<<"\n*********发牌后********:\n";
    cout<<"\nfarmer1:\n";
    deck.display(farmer1,17);
    cout<<"\nfarmer2:\n";
    deck.display(farmer2,17);
    cout<<"\nlandlord:\n";
    deck.display(landlord,20);
}
1