无法从链表 C 中打印出正确的值



在将节点插入链表后,我在打印链表的正确值时遇到问题。我的链表的结构如下。

#include <stdio.h>
#define SIZE 50
struct car{
int car_number;
int speed;
int consumption;
int reliability;
};
struct teams{
char team_name[SIZE];
struct elem_fila *car_list_root;
};
struct elem_fila{
struct car car_info;
struct elem_fila *next_car;
};

structteams是一个结构,它将有一个elem_fila结构的链接列表,每个结构都有关于汽车的信息。

我的插入代码如下:

void insert(struct car c, struct elem_fila **root){
struct elem_fila *aux, *next, *previous;
aux = (struct elem_fila *) malloc(sizeof(struct elem_fila));
//Something went wrong
if (aux == NULL) {
return;
}
aux->car_info = c;
aux->next_car = NULL;
printf("%dn", aux->car_info.speed);
//If the root is null
if (*root == NULL){
*root = aux;
printf("%dn", (*root)->car_info.speed);

}
//If the root is not null
else{
printf("%d", aux->car_info.speed);
previous = *root;
next = (*root)->next_car;
while (next != NULL) {
previous = next;
next = next->next_car;
}
previous->next_car = aux;
aux->next_car =NULL;
}
printf("%d", (*root)->car_info.speed);
}

插入算法的工作原理如下:每个新元素都被放在列表的后面。这里的";打印";即使在插入新元素时,根元素仍然可以打印之前输入的值。

但当我调用我的打印列表算法时,一切都出错了,它打印出了随机值(可能是内存地址(。这是代码:

void printList(struct elem_fila *root){
struct elem_fila *current;
printf("%dn", (root)->car_info.speed);
current = root;

while(current != NULL ){
printf("Numero carro: %d, Velocidade: %d, Consumption: %d, Reliability:%dn",current->car_info.car_number,
          current->car_info.speed,
          current->car_info.consumption,
          current->car_info.reliability);
current = current->next_car;
}
return;
}

这里,第二行的printf没有给出数字30(我作为测试插入的那个(,而是给了我数字741355568。我调用以下函数:

void teste2(){
strcpy(team_list[0].team_name,"Team A");
struct car carro = { 10, 30, 50, 60};
struct car carro2 = { 100, 80, 90, 70};
insert(carro, &team_list[0].car_list_root);
insert(carro2, &team_list[0].car_list_root);
printf("%s" ,team_list[0].team_name);
printList(team_list[0].car_list_root);
}

注意:team_list是一个团队结构数组。注2:球队的名字打印得像预期的

如果有人能帮忙,我将不胜感激。我试了很长时间,但似乎找不到问题!

我做了一些更改,它按预期成功编译并运行。

首先,我添加了库string.h和stdlib.h。

创建了一个触发test2的main。

在test2中,我声明了一个structteam数组,并为它提供了100个索引。

我编译并运行了它,这是输出:

30
30
3080
8030Team A30
Numero carro: 10, Velocidade: 30, Consumption: 50, Reliability:60
Numero carro: 100, Velocidade: 80, Consumption: 90, Reliability:70

我想这就是你想要的。。

此外,在退出程序之前,您需要释放动态分配。

我用gcc编译了这个标志

gcc -ansi -pedantic-errors -Wall -Wextra -g

相关内容

  • 没有找到相关文章

最新更新