Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C.Can';t在末尾添加元素_C_Struct_Linked List - Fatal编程技术网

C.Can';t在末尾添加元素

C.Can';t在末尾添加元素,c,struct,linked-list,C,Struct,Linked List,你好,这是我的代码: #include <stdio.h> #include <stdlib.h> typedef struct data{ int a; struct data *p; }data; void add(data *begin, data *new); int main(void){ data *first = malloc(sizeof(data)); data *second = malloc(sizeof(data

你好,这是我的代码:

#include <stdio.h>
#include <stdlib.h>
typedef struct data{
    int a;
    struct data *p;
}data;

void add(data *begin, data *new);

int main(void){
    data *first = malloc(sizeof(data));
    data *second = malloc(sizeof(data));
    data *third = malloc(sizeof(data));
    first->a = 1;
    first->p = second;
    second->a = 2;
    second->p = third;
    third->a = 3;
    third->p = NULL;
    data *new = malloc(sizeof(data));
    new->a = 4;
    add(first, new);
    data *temp = first;
    do{
        printf("%i\n", temp->a);
        temp = temp->p;
    }
    while(temp->p != NULL);
    return 0;
}

void add(data *begin, data *new){
     data *temp = malloc(sizeof(data));
     temp = begin;
     while(1){
        if(temp->p == NULL){
            temp->p = new;
            break;
        }
        else{
            temp = temp->p;
        }
     }
}
#包括
#包括
typedef结构数据{
INTA;
结构数据*p;
}数据;
作废添加(数据*开始,数据*新);
内部主(空){
data*first=malloc(sizeof(data));
data*second=malloc(sizeof(data));
数据*third=malloc(sizeof(数据));
第一->a=1;
第一->p=第二;
第二->a=2;
第二->p=第三;
第三->a=3;
第三->p=NULL;
data*new=malloc(sizeof(data));
新建->a=4;
增加(第一,新的);
数据*温度=第一;
做{
printf(“%i\n”,temp->a);
温度=温度->p;
}
而(临时->p!=NULL);
返回0;
}
作废添加(数据*开始,数据*新){
数据*temp=malloc(sizeof(数据));
温度=开始;
而(1){
如果(临时->p==NULL){
温度->p=新的;
打破
}
否则{
温度=温度->p;
}
}
}
代码很简单。但当我运行它时,我总是得到3(它不会添加新列表)。请帮助我,我找不到类似的问题,那可以帮助我

这些行:

 data *temp = malloc(sizeof(data));
 temp = begin;
有一件事是错误的,因为你首先分配内存,然后不使用它。您应该初始化
temp
变量,如
data*temp=NULL

这就是为什么您只获得前3项:

do{
    printf("%i\n", temp->a);
    temp = temp->p;
}
while(temp->p != NULL);
当一个项目没有下一个项目时,循环停止(因此它停止得太早)

相反,可以这样做:

do {
    printf("%i\n", temp->a);
    temp = temp->p;
} while(temp != NULL);
这些线路:

 data *temp = malloc(sizeof(data));
 temp = begin;
有一件事是错误的,因为你首先分配内存,然后不使用它。您应该初始化
temp
变量,如
data*temp=NULL

这就是为什么您只获得前3项:

do{
    printf("%i\n", temp->a);
    temp = temp->p;
}
while(temp->p != NULL);
当一个项目没有下一个项目时,循环停止(因此它停止得太早)

相反,可以这样做:

do {
    printf("%i\n", temp->a);
    temp = temp->p;
} while(temp != NULL);

我希望你在c工作;在C++中,“新”是一个保留关键字;这不是一个明智的命名选择…是的,我正在使用C,检查我包含的库(stdio和stdlib)。在旧的C中,新的命名也不是一个明智的选择,imho。另外,你能解释一下为什么你在add中使用malloc吗?我希望你在c中工作;在C++中,“新”是一个保留关键字;这不是一个明智的命名选择…是的,我正在使用C,检查我包含的库(stdio和stdlib)。在旧的C中,新的命名也不是一个明智的选择,imho。另外,你能解释一下为什么在add中使用malloc吗?我看不出你的do-while循环和我的do-while循环有什么区别。只是while在do循环结束的同一行上,但是我复制了它,它工作了。你能解释一下原因吗?如果你用一个简单的
while
循环而不是
do
循环,可能会更明显。在您的代码中,当您所在的节点在打印它之前有一个
NULL
next
时终止。所以,尾巴永远不会被打印出来。在新代码中,当
temp
NULL
时终止,这发生在打印尾部之后。我看不出您和我的do-while循环之间有任何区别。只是while在do循环结束的同一行上,但是我复制了它,它工作了。你能解释一下原因吗?如果你用一个简单的
while
循环而不是
do
循环,可能会更明显。在您的代码中,当您所在的节点在打印它之前有一个
NULL
next
时终止。所以,尾巴永远不会被打印出来。在新代码中,当
temp
NULL
时终止,这在打印尾部后发生。