插入链表

时间:2016-06-19 22:16:20

标签: c struct insert linked-list

你好我们制作了一个程序,它插入3个结构链表(链表),插入名称,路径和持续时间,如代码所示 ,但是当我运行该项目时,它停留在这一行: fgets(n3->frame->name, 19, stdin); 我该如何解决这个问题?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Frame
{
    char            *name;
    unsigned int    duration;
    char            *path;  // may change to FILE*
}*p , *p1,*p2;

typedef struct Frame frame_t;

struct Link
{
    frame_t *frame;
    struct Link *next;
}*n , *n1 ,*n2;

typedef struct Link link_t;

struct node *insert(struct node *n3);

int main()
{

    printf("1\n");
    insert(n);


    printf("1\n");

}

struct node *insert(struct Link *n3)
{
    while (n3 != NULL)
    {
        n3 = n3->next;

    }
    if (n3 == NULL)
    {


        n3 = (struct node *)malloc(sizeof(struct Frame)); //gives memory to the node
        fgets(n3->frame->name, 19, stdin);
        n3 = (struct node *)malloc(sizeof(struct Frame)); //gives memory to the node
        fgets(n3->frame->path, 100, stdin);
        n3 = (struct node *)malloc(sizeof(struct Frame)); //gives memory to the node
        scanf("%d",&n3->frame->duration);
    }


}

1 个答案:

答案 0 :(得分:0)

fgets的一些documentation说:

  

此函数从文件中读取尽可能多的行,当缓冲区已满(最大长度为1个字符),检测到行尾或检测到EOF或错误时停止。然后它存储一个NULL来终止字符串。

上面的代码没有编译(缺少一些include和typedef?),所以我不能自己执行它,但你是否正在做一些事情,比如确保在输入输入后点击“输入”?

如果你是,我相信你将面临许多其他问题。如何使用fgets的一个示例是another回答,上面的代码中存在可疑的内容,例如为类型struct Frame分配足够的内存,但将其转换为单独的类型并分配给第三个(struct Link)。如果使用-Wall并且通常会注意警告,我建议在编译步骤中添加gcc标记。