为什么我的程序返回无限循环?

时间:2016-11-01 14:42:55

标签: c linked-list nodes infinite-loop

我在C中编程基本上将一个节点添加到一个链表中,然后假设对它进行排序。该节点包含字符串,计数和指向下一个节点的指针。添加新节点时,它会通过并检查以确保没有包含该字符串的节点。如果有,它不会添加新节点,而是将计数加1。然后假设按递减顺序对其进行排序。

这是我的添加功能代码。

void ins(char s[])
{
    NODE_T *temp = (NODE_T*)malloc(sizeof(NODE_T));
    strcpy(temp->symbol, s);
    NODE_T *loop = (NODE_T*)malloc(sizeof(NODE_T));
    NODE_T *countCheck = (NODE_T*)malloc(sizeof(NODE_T));

    if(head == NULL)
    {
        head = temp;
        head->count = 1;
        head->next = NULL;
    }
    else
    {
        loop = head;
        while(loop != NULL)
        {
            if(strcmp(temp->symbol, loop->symbol) == 0)
            {
                loop->count++;
                countCheck = head;
                while(countCheck != NULL)
                {
                    if(loop->count > head->count)
                    {
                        loop->next = head;
                        head = loop;
                        break;
                    }
                    countCheck = countCheck->next;
                }
                break;
            }
            else if(loop->next == NULL)
            {
                temp->count = 1;
                loop->next = temp;
                temp->next = NULL;
                break;
            }
            else
                loop = loop->next;
        }
    }
}

到目前为止,我只添加了一种方法来排序当前节点temp是否大于第一个节点。它正确排序,但是当我调用print函数时,它会以无限循环打印它。

以下是我声明节点,打印功能和我的主要代码。

typedef struct NODE
{
    char symbol[10];
    int count;
    struct NODE *next;
} NODE_T;

NODE_T *head = NULL;

void prl()
{
    NODE_T *temp  = (NODE_T*)malloc(sizeof(NODE_T));
    temp = head;
    while(temp != NULL)
    {
        printf("%s %d\n", temp->symbol, temp->count);
        temp = temp->next;
    }
}

int main(void)
{
    char command[3];
    char string[10];
    printf("Command: "); fflush(stdout);
    scanf("%s", &command);
    while(strcmp(command, "end") != 0)
    {
        if(strcmp(command, "ins") == 0)
        {
            scanf("%s", &string);
            ins(string);
        }
        else if(strcmp(command, "prl") == 0)
        {
            prl();
        }
        printf("Command: "); fflush(stdout);
        scanf("%s", &command);
    }
    return 0;
}

要使用main,请键入' ins apple'当它要求命令时,它会将计数为1的apple添加为节点。如果再次添加apple,它将仅将节点增加1。添加香蕉3次将使香蕉成为第一个节点,但是当我调用打印功能prl时,它会打印出来 香蕉3 苹果2 在无限循环中。

任何帮助都将不胜感激。

0 个答案:

没有答案