Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何按花色和价值创建有序的卡片链表_C_Struct_Linked List_Nodes - Fatal编程技术网

C 如何按花色和价值创建有序的卡片链表

C 如何按花色和价值创建有序的卡片链表,c,struct,linked-list,nodes,C,Struct,Linked List,Nodes,我有一项任务,要制作一个按花色和价值排序的卡片节点链表。卡片结构: struct card { int value; char suit; } struct CNode { card * card1; CNode * CNode->next; } 或者类似的东西;基本上有一个卡片结构和一个链表(不确定这是否就是我拥有的,但我拥有的是100%正确的,所以不要评论我的结构)。下面是创建列表的代码:

我有一项任务,要制作一个按花色和价值排序的卡片节点链表。卡片结构:

   struct card {
        int value;
        char suit;
    }
    struct CNode {
        card * card1;
        CNode * CNode->next;
    }
或者类似的东西;基本上有一个卡片结构和一个链表(不确定这是否就是我拥有的,但我拥有的是100%正确的,所以不要评论我的结构)。下面是创建列表的代码:

    void addCard(Player * player1, Card * card1) {
         CNode * ins_node = malloc(sizeof(CNode));
         ins_node->card = card1;
         ins_node->next = NULL;
         if (player1->hand == NULL);
                  player1->hand = ins_node;
                  return;
         else {
             CNode * temp = player1->hand;
             while (temp->next != NULL) {
                if (strcmp(temp->card->suit, ins_node->card->suit) == 0){
                         //if (ins_node->card->value > temp->card->value) {
                              ins_node->next = temp->next;
                              temp->next = ins_node;
                               return;
                         // }
                }
            }
            temp = temp->next;
    }
    temp->next = ins_node;
}

让我们假装所有的格式都很好。现在,我不明白的是,为什么它不能满足我的需要。我已经为此工作了几个小时,没有任何进展。如果您能帮助/修改现有代码,我将不胜感激。目前,这将输出西服订购的卡,但该值会把一切搞糟。如果你看到任何简单的解决方法,请告诉我

在我看来,你进入了一个无限循环:

             while (temp != NULL) {
              if (strcmp(temp->card->suit, ins_node->card->suit) == 0){
                         if (ins_node->card->value > temp->card->value) {
                           CNode * prev = temp;
                           temp = temp->next;
                           prev->next = ins_node;
                           ins_node->next = temp;
                           return;
                         }
              }
              temp = temp->next;   //move on no matter match or not. 
            }  

   struct card {
        int value;
        char suit;
    }
suit
只是一个
char
,您无法使用来比较
char
s

                if (strcmp(temp->card->suit, ins_node->card->suit) == 0){

如果您没有
#包括
,则此错误可能不会被注意到。或者您没有显示
struct card

的真正定义;这正是发生的事情。我修复了无限循环,并对其进行了一些修改,使套装都能很好地工作。但是,我无法订购这些卡。应编辑原始帖子以显示我最近的修复。这将输出给定玩家手上的所有牌,按花色排序,但不按值排序。@Eric,在这个循环中,只有当牌与玩家的花色相同时,才插入。这是你需要解决的问题:那些不同花色的卡片会发生什么情况,在哪里插入?我在底部有。如果卡片与任何套装不匹配,则会添加到末尾。到目前为止,假设一张15张牌的牌,我已经按西装分类了。例如,我有4个圆,后面是5个正方形,后面是3个钻石,后面是2个三角形。然而,我无法按价值订购每件西装。我的目标是将其设置为降序或升序值,并按套装(套装不是固定的个人对个人的顺序)进行细分。当我取消注释该部分时,我会将所有内容排序,但每个套装的第一个节点除外。