0

我遇到了一个问题,我想将项目添加到链表的末尾,但似乎我在这里陷入了无限循环。

void addCheckPoint(struct checkPoints **checkPoint) {
    struct checkPoints *checkPt = *checkPoint;

    while (checkPt->next != NULL) {
        checkPt->next;
        if (checkPt->next == NULL) {
            scanf("%c %d %d %d %d", &checkPt->dropOut, &checkPt->currentPoint, &checkPt->competitor, &checkPt->hour, &checkPt->minute);
        }
    }
}
4

4 回答 4

3

您永远不会更新checkPt循环中的值。换行

checkPt->next;

checkPt = checkPt->next;

解决这个问题。

请注意,该功能可能存在更多问题。尽管它的名字,它实际上并没有在列表中添加任何东西。它改为编辑尾部项目的内容。如果这不是故意的,您将需要 malloc 一个新元素,然后将其添加到尾部。

于 2012-12-14T09:56:54.427 回答
2
void addCheckPoint(struct checkPoints **checkPoint) {
    struct checkPoints *checkPt = *checkPoint;

    while (checkPt != NULL) {
        if (checkPt->next == NULL) {
            scanf("%c %d %d %d %d", checkPt->dropOut, checkPt->currentPoint, checkPt->competitor, checkPt->hour, checkPt->minute);
        }
        checkPt = checkPt->next;
    }
}
于 2012-12-14T09:57:51.727 回答
1

试试这个

 void addCheckPoint(struct checkPoints **checkPoint) {
        struct checkPoints *checkPt = *checkPoint;

        while (checkPt->next != NULL) {
             checkPt=checkPt->next;
            if (checkPt == NULL) {
                scanf("%c %d %d %d %d", &checkPt->dropOut, &checkPt->currentPoint, &checkPt->competitor, &checkPt->hour, &checkPt->minute);
            }

        }
    }
于 2012-12-14T09:58:50.510 回答
0
#include <stdlib.h>
#include <stdio.h>

struct checkPoints
{
    char dropOut;
    int currentPoint;
    int competitor;
    int hour;
    int minute;

  struct checkPoints *next;
};

void addCheckPoint(struct checkPoints **checkPoint) {
    while (*checkPoint)
        checkPoint = &(*checkPoint)->next;

    /* FIXME: check malloc() return value */
    *checkPoint = malloc(sizeof (struct checkPoints));
    (*checkPoint)->next = 0;

    /* NOTE: the leading space in front of the %c */
    scanf(" %c %d %d %d %d",
          &(*checkPoint)->dropOut,
          &(*checkPoint)->currentPoint,
          &(*checkPoint)->competitor,
          &(*checkPoint)->hour,
          &(*checkPoint)->minute);
}

struct checkPoints *list = 0;

int
main ()
{
    addCheckPoint (&list);
    addCheckPoint (&list);
}
于 2012-12-14T10:22:20.977 回答