我有一个作业,用于制作按套装和价值排序的卡片节点的链接列表。卡片结构:
struct card {
int value;
char suit;
}
struct CNode {
card * card1;
CNode * CNode->next;
}
或类似的东西;基本上有一个卡片stsruct和一个链接列表(不确定这是否正是我所拥有的,但我拥有的是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;
}
让我们假装所有格式都很好。现在,我无法弄清楚为什么这不能满足我的需要。我已经工作了几个小时,无法取得任何进展。如果您可以帮助/修改现有代码,我真的很感激。目前,这将输出由西装订购的卡片,但价值将一切都搞砸了。如果你看到任何简单的修复,请告诉我。
答案 0 :(得分:0)
在我看来,你遇到了无限循环:
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.
}
答案 1 :(得分:0)
根据
suit
char
仅为char
,您无法使用
if (strcmp(temp->card->suit, ins_node->card->suit) == 0){
#include <string.h>
如果您没有struct card
,则此错误只会被忽视。或者您没有显示FindAncestor
的真实定义。