C程序-链表问题



我有一个模拟文本编辑器的程序。它允许用户根据发送的命令,以任何特定的方式向列表中添加文本行。

其中一个功能允许用户在列表中向后移动以查看他们的行(还有另一个功能可以让他们向前移动,但这个功能没有问题)。

还有一些功能可以让用户插入或附加文本。Insert将行放在当前行之前,而append将其设置在之后。我遇到的一个问题是插入插入文本的方式。

用户点击i进行插入,通过标准输入(stdin)输入文本,然后点击CTRL + D(在Linux环境中)模拟NULL并返回命令模式。之后,如果你在列表中导航,它似乎进入了列表顶部的最后一行,所有内容都会向后移动。有一次,我插入了4行文本,它对最后2行进行了无限循环,破坏了文本文件。

我相信这与我链接列表的逻辑有关,但我很难将它们可视化。以下是有问题的函数:

void insert_line(char *t)
{
    /* Allocate and clear (i.e. set all to 0) */
    struct line *new_line = calloc(1, sizeof(struct line));
    new_line->text = t;
    if(current_line == NULL)
        head = current_line = new_line;
    else
    {
        new_line->prev = current_line->prev;
        new_line->next = current_line;
        current_line->next = new_line;
        current_line = new_line;
        if(current_line->prev == NULL)
            head = current_line;
    }
}

这一定是一团糟——它有时无限循环文本,总是把文本倒过来。这就是我如何使用insert功能:

else if(command[0] == 'i')
    {
        char * line;
        while((line = get_line(stdin)) != NULL)
            insert_line(line);
     }

get_line每次读取一行文本并返回文本,直到达到EOF。我知道get_line函数正在工作,因为我的老师为我们编写了它。

//
// Function: previous_line
// Moves the current_line pointer to the previous node, if any, in the linked-list.
//
void previous_line(void)
{
    if(current_line == NULL)
        printf("Error: No Lines Exist.n");
    else if(current_line->prev != NULL) {
        current_line = current_line->prev;
        printf("%sn", current_line->text);
    }
    else
        printf("Error: Already beginning-of-line.n");
}

这一个很奇怪,当我在文本中间添加文本时,next_line函数工作正常,但当我运行它返回列表时,它没有显示我添加的内容。

在纸上画(每行一个框,下一行和上一行用一些箭头)

这个比特有问题-当你画的时候应该很清楚。

new_line->prev = current_line->prev;
new_line->next = current_line;
current_line->next = new_line;
current_line = new_line;

如果您试图将换行符附加到文本文件,则应该执行

new_line->prev = current_line;
current_line->next = new_line;
current_line = new_line;

相关内容

  • 没有找到相关文章

最新更新