搜索
查看: 699|回复: 7
打印 上一主题 下一主题

为什么>A<

[复制链接]
跳转到指定楼层
楼主
发表于 2016-8-16 17:12:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[mw_shl_code=c,true]#include <stdio.h>
struct queue
{
        int data[1000];
    int head;
    int tail;
};
struct stack
{
        int data[10];
    int top;
};
int main()
{   
        struct queue q1,q2;
        struct stack s;
    int book[10];
    int i,t;
    //初始化队列
        q1.head=1;q1.tail=1;
        q2.head=1;q2.tail=1;
    //初始化栈
        s.top=0;
    //初始化用来标记的数组,用来标记哪些牌已在桌上
        for(i=1;i<=9;i++)
    book=0;
    //依次向队列插入6个数
    //小亨手上的6张牌
    for(i=1;i<=6;i++)
    {
                scanf("%d",&q1.data[q1.tail]);
        q1.tail++;
    }
    //小哈手上的6张牌
    for(i=1;i<=6;i++)
    {
                scanf("%d",&q2.data[q2.tail]);
        q2.tail++;
    }
    while(q1.head<q1.tail && q2.head<q2.tail)
    t=q1.data[q1.head];//小亨出一张牌
    if(book[t]==0)
    {
                //小亨此轮没有赢牌
        q1.head++;//小亨已经打出一张牌,所以要把打出的牌出队
        s.top++;
        s.data[s.top]=t;//再把打出的牌放到桌上,即入栈
        book[t]=1;//标记桌上现在已经有牌面为t的牌
    }
    else
    {
                //小亨此轮可以赢牌
        q1.head++;//小亨已经打出一张牌,所以要把打出的牌出队
        q1.data[q1.tail]=t;//紧接着把刚才打出的牌又放到手中牌的末尾
        q1.tail++;         
        while(s.data[s.top]!=t)//把桌上可以赢得的牌依次放到手中牌的末尾
        {                     
                        q1.data[q1.tail]=s.data[s.top];//依次放入队尾
            q1.tail++;
            s.top--;//栈中少了一张牌,所以栈要减1
        }
                //收回桌面上为t的牌
        book[s.data[s.top]]=0;
        q1.data[q1.tail]=s.data[s.top];
        q1.tail++;
        s.top--;
    }
    if(q1.head==q1.tail) break;//小亨手中的牌如果已经打完,游戏结束
    t=q2.data[q2.head];//小哈出一张牌
    //判断小哈当前打出的牌是否能赢牌
    if(book[t]=0)//表明桌子上没有牌面为t的牌
    {
                //小哈此轮没有赢牌
        q2.head++;//小哈已经打出一张牌,所以要把打出的牌出队
        s.top++;
        s.data[s.top]=t;//再把打出的牌放到桌上,即入栈
        book[t]=1;//标记桌上现在已经有牌面为t的牌
    }
    else
    {
                //小哈此轮可以赢牌
        q2.head++;//小哈已经打出一张牌,所以要把打出的牌出队
        qi.data[q1.tail]=t;//因为此轮可以赢牌,所以紧接着把刚才打出的牌又放到手中牌的末尾
        q1.tail++;        
        while(s.data[s.top]!=t)//把桌上可以赢得的牌依次放到手中牌的末尾
        {     
            book[s.data[s.top]]=0;//取消标记                 
                        q2.data[q1.tail]=s.data[s.top];//依次放入队尾
            q2.tail++;
            s.top--;//栈中少了一张牌,所以栈要减1
        }
    }
    if(q2.head==q2.tail)
    {
                printf("小亨win\n");
        printf("小亨当前手中的牌是");
        for(i=q1.head;i<=q1.tail-1;i++)
        printf(" %d\n",qi.data);
        if(s.top>0)//如果桌上有牌则依次输出桌上的牌
        {
                        printf("桌上的牌是");
            for(i=1;i<=s.top;i++)
            printf(" %d",s.data);
        }
        else
        {
                        printf("桌上已经没有牌了");
        }
    }
    else
    {
                printf("小哈win\n");
        printf("小哈当前手中的牌是");
        for(i=q1.head;i<=q1.tail-1;i++)
        printf(" %d\n",qi.data);
        if(s.top>0)//如果桌上有牌则依次输出桌上的牌
        {
                        printf("桌上的牌是");
            for(i=1;i<=s.top;i++)
            printf(" %d",s.data);
        }
        else
        {
                        printf("桌上已经没有牌了");
        }
    }
        getchar();getchar();
        return 0;
}[/mw_shl_code]
为何第68行错了
沙发
发表于 2016-8-16 17:40:34 | 只看该作者
改了一下
[mw_shl_code=c,true]#include <stdio.h>
struct queue
{
    int data[1000];
    int head;
    int tail;
};
struct stack
{
    int data[10];
    int top;
};
int main()
{   
    struct queue q1,q2;
    struct stack s;
    int book[10];
    int i,t;
    //初始化队列
    q1.head=1;q1.tail=1;
    q2.head=1;q2.tail=1;
    //初始化栈
    s.top=0;
    //初始化用来标记的数组,用来标记哪些牌已在桌上
    for(i=1;i<=9;i++)
    book=0;
    //依次向队列插入6个数
    //小亨手上的6张牌
    for(i=1;i<=6;i++)
    {
        scanf("%d",&q1.data[q1.tail]);
        q1.tail++;
    }
    //小哈手上的6张牌
    for(i=1;i<=6;i++)
    {
        scanf("%d",&q2.data[q2.tail]);
        q2.tail++;
    }
    while(q1.head<q1.tail && q2.head<q2.tail)
    {
    t=q1.data[q1.head];//小亨出一张牌
    if(book[t]==0)
    {
        //小亨此轮没有赢牌
        q1.head++;//小亨已经打出一张牌,所以要把打出的牌出队
        s.top++;
        s.data[s.top]=t;//再把打出的牌放到桌上,即入栈
        book[t]=1;//标记桌上现在已经有牌面为t的牌
    }
    else
    {
        //小亨此轮可以赢牌
        q1.head++;//小亨已经打出一张牌,所以要把打出的牌出队
        q1.data[q1.tail]=t;//紧接着把刚才打出的牌又放到手中牌的末尾
        q1.tail++;         
        while(s.data[s.top]!=t)//把桌上可以赢得的牌依次放到手中牌的末尾
        {                     
            q1.data[q1.tail]=s.data[s.top];//依次放入队尾
            q1.tail++;
            s.top--;//栈中少了一张牌,所以栈要减1
        }
        //收回桌面上为t的牌
        book[s.data[s.top]]=0;
        q1.data[q1.tail]=s.data[s.top];
        q1.tail++;
        s.top--;
    }
    if(q1.head==q1.tail)
    {
        break;//小亨手中的牌如果已经打完,游戏结束
    }
    t=q2.data[q2.head];//小哈出一张牌
    //判断小哈当前打出的牌是否能赢牌
    if(book[t]==0)//表明桌子上没有牌面为t的牌
    {
        //小哈此轮没有赢牌
        q2.head++;//小哈已经打出一张牌,所以要把打出的牌出队
        s.top++;
        s.data[s.top]=t;//再把打出的牌放到桌上,即入栈
        book[t]=1;//标记桌上现在已经有牌面为t的牌
    }
    else
    {
        //小哈此轮可以赢牌
        q2.head++;//小哈已经打出一张牌,所以要把打出的牌出队
        q1.data[q1.tail]=t;//因为此轮可以赢牌,所以紧接着把刚才打出的牌又放到手中牌的末尾
        q1.tail++;        
        while(s.data[s.top]!=t)//把桌上可以赢得的牌依次放到手中牌的末尾
        {     
            book[s.data[s.top]]=0;//取消标记                 
            q2.data[q1.tail]=s.data[s.top];//依次放入队尾
            q2.tail++;
            s.top--;//栈中少了一张牌,所以栈要减1
        }
    }
    if(q2.head==q2.tail)
    {
        printf("小亨win\n");
        printf("小亨当前手中的牌是");
        for(i=q1.head;i<=q1.tail-1;i++)
        printf(" %d\n",q1.data);
        if(s.top>0)//如果桌上有牌则依次输出桌上的牌
        {
            printf("桌上的牌是");
            for(i=1;i<=s.top;i++)
            printf(" %d",s.data);
        }
        else
        {
            printf("桌上已经没有牌了");
        }
    }
    else
    {
        printf("小哈win\n");
        printf("小哈当前手中的牌是");
        for(i=q1.head;i<=q1.tail-1;i++)
        printf(" %d\n",q1.data);
        if(s.top>0)//如果桌上有牌则依次输出桌上的牌
        {
            printf("桌上的牌是");
            for(i=1;i<=s.top;i++)
            printf(" %d",s.data);
        }
        else
        {
            printf("桌上已经没有牌了");
        }
    }
}
    getchar();getchar();
    return 0;
}[/mw_shl_code]
板凳
发表于 2016-8-16 17:43:06 | 只看该作者
一眼看出什么错误
1.while循环因为没有花括号 所以 break (68行的) 无效 (错误)
2.71行的==打成了= (警告)
3.所有的 q1 你打成了 qi (错误)

点评

1和2  发表于 2016-8-17 10:45
qi后来我改了 12错了  发表于 2016-8-17 10:07
地板
发表于 2016-8-17 10:44:44 | 只看该作者
????????

点评

我坐板凳,你坐地板  发表于 2016-8-17 10:46
5#
 楼主| 发表于 2016-8-17 10:47:27 | 只看该作者
初学C 发表于 2016-8-17 10:44
????????

我有一个推箱子新帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表