我有结构旅行,我做这个旅行的链接列表,当我添加旅行到列表我没有问题,但是当添加第二次旅行它覆盖第一个。 我做的输入被添加两趟ID为1和2,当我重复他们,我看到有两次ID 2功能改变其他变量的数据
#include <stdio.h>
#include <stdlib.h>
char date[10];
char date2[10];
char newdate[10];
char newdate2[10];
int i,t,i2,t2;
int ret;
int option;
typedef struct trip
{
int code;
char startdate[10];
int duration;
double price;
} Trip;
typedef struct list
{
Trip* Trip;
struct list* next;
} List;
List* create_List(Trip* trip)
{
List* newList = malloc(sizeof(List));
if (NULL != newList)
{
newList->Trip = trip;
newList->next = NULL;
}
return newList;
}
void delete_List(List* oldList)
{
if (NULL != oldList->next)
{
delete_List(oldList->next);
}
free(oldList);
}
List* add_List(List* wordList, Trip* trip)
{
List* newList = create_List(trip);
if (NULL != newList)
{
newList->next = wordList;
}
return newList;
}
void createTripData(Trip *trip);
int main(int argc, char *argv[])
{
List* trips;
int first = 1;
while(1)
{
printf("Select an option: \n 1-add new trip \n 2-Iterate\n");
scanf("%d", &option);
if (option == 1)
{
Trip newTrip;
createTripData(&newTrip);
if(first == 1)
{
first = -1;
trips = create_List(&newTrip);
}
else
{
trips = add_List(trips, &newTrip);
}
}
else if (option == 2)
{
system("@cls||clear");
List* iter;
for (iter = trips; NULL != iter; iter = iter->next)
{
printf("Id %d \n", iter->Trip->code);
}
}
}
return (0);
}
void createTripData(Trip *trip)
{
fflush(stdin);
printf("Enter id: ");
scanf("%d", &trip->code);//
}
'fflush(stdin)'在除少数几个实现之外的所有行为都是未定义行为,并且是不可移植的。无论何时“函数改变其他变量的数据”,这通常意味着你正在写入超出内存块的范围,高兴地砸碎相邻变量的内存。仔细检查你使用的指针和你提供的解除引用。除非绝对需要,否则应避免使用*全局变量*这里不需要任何变量。 –
Trip newTrip的范围在这个if块内。而且,你反复使用它。 – BLUEPIXY
newTrip只是中间人,然后将该行程添加到列表*行程 –