啊这啧啧啧 发表于 2023-11-7 19:16:09

小猫钓鱼案例输出有问题

#include<stdio.h>
struct queue{
        int data;
        int head;
        int tail;
};
struct stack{
        int data;
        int top;
};
int main(){
        struct queue q1,q2;
        struct stack s;
        int book={0};
       
        //初始化队列
        q1.head=0;q1.tail=0;
        q2.head=0;q2.tail=0;
        //初始化栈
        s.top=0;
        //手上的6张牌
        for(int i=0;i<6;i++){
                scanf("%d",&q1.data);
        }
        for(int i=0;i<6;i++){
                scanf("%d",&q1.data);
        }       
        //出牌
        int t;
        while(q1.head<q1.tail&&q2.head<q2.tail){
                t=q1.data;       
                //打出牌
                q1.head++;       
                //1没赢
                if(book==0){
                                s.data[++s.top]=t;
                                book=1;
                        }       
                //1可以赢
                else{
                        q1.data=t;
                                while(s.data!=t){
                                        book]=0;
                                        q1.data=s.data;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                }
                        }       
               
                t=q2.data;
                //打出牌                                                               
                  q2.head++;
                //2没赢               
                  if(book==0){       
                    s.data[++s.top]=t;       
                          book=1;
                  }
      //2可以赢
                  else{
                          q2.data=t;
                              while(s.data!=t){
                                book]=0;
                                        q2.data=s.data;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                          }
                  }                                                       
        }
      if(q2.head==q2.tail){
                        printf("q1赢了,他手上的牌是:");
                        for(int i=q1.head;i<q1.tail;i++){
                                printf(" %d",q1.data);
                        }
                        if(s.top>0){
                                printf("\n桌上的数为:");
                                for(int i=1;i<=s.top;i++){
                                printf(" %d",s.data);
                                }
                        }else{
                                printf("\n桌上无牌");
                        }
                }else{
                        printf("q2赢了,他手上的牌是:");
                        for(int i=q2.head;i<q2.tail;i++){
                                printf(" %d",q2.data);
                        }
                        if(s.top>0){
                          printf("\n桌上的数为:");
                                for(int i=0;i<=s.top;i++){
                                                printf(" %d",s.data);
                                }
                        }else{
                                printf("\n桌上无牌");
                        }                                               
                }                               
}

isdkz 发表于 2023-11-7 19:16:25

这段代码中存在一些问题。首先,队列q2没有被正确初始化,其头尾指针应该也被初始化为0。其次,出牌的逻辑中存在错误,应该是先出牌再判断胜负,而不是先判断胜负再出牌。最后,打印桌上的牌时,应该从1开始遍历栈中的数据,而不是从0开始。

以下是修改后的代码:

#include<stdio.h>
struct queue{
    int data;
    int head;
    int tail;
};
struct stack{
    int data;
    int top;
};
int main(){
    struct queue q1,q2;
    struct stack s;
    int book={0};
   
    //初始化队列
    q1.head=0;q1.tail=0;
    q2.head=0;q2.tail=0;
    //初始化栈
    s.top=0;
    //手上的6张牌
    for(int i=0;i<6;i++){
      scanf("%d",&q1.data);
    }
    for(int i=0;i<6;i++){
      scanf("%d",&q2.data);
    }   
    //出牌
    int t;
    while(q1.head<q1.tail&&q2.head<q2.tail){
      t=q1.data;
      q1.head++;
      if(book==0){
            s.data[++s.top]=t;
            book=1;
      }   
      else{
            q1.data=t;
            while(s.data!=t){
                book]=0;
                q1.data=s.data;
            }
      }
      t=q2.data;
      q2.head++;
      if(book==0){
            s.data[++s.top]=t;
            book=1;
      }
      else{
            q2.data=t;
            while(s.data!=t){
                book]=0;
                q2.data=s.data;
            }
      }
    }
    if(q2.head==q2.tail){
      printf("q1赢了,他手上的牌是:");
      for(int i=q1.head;i<q1.tail;i++){
            printf(" %d",q1.data[ i]);
      }
      if(s.top>0){
            printf("\n桌上的数为:");
            for(int i=1;i<=s.top;i++){
                printf(" %d",s.data[ i]);
            }
      }else{
            printf("\n桌上无牌");
      }
    }else{
      printf("q2赢了,他手上的牌是:");
      for(int i=q2.head;i<q2.tail;i++){
            printf(" %d",q2.data[ i]);
      }
      if(s.top>0){
            printf("\n桌上的数为:");
            for(int i=1;i<=s.top;i++){
                printf(" %d",s.data[ i]);
            }
      }else{
            printf("\n桌上无牌");
      }
    }
}

Mike_python小 发表于 2023-11-7 19:17:45

你好,感谢您分享代码。请问您遇到了什么问题,需要我帮您解决吗?

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 小猫钓鱼案例输出有问题