/ Девиз этой программы состоит в том, чтобы динамически добавлять элементы автомобиля и печатать их / всякий раз, когда я запускаю код, первое добавление, когда carbase равно нулю, становится правильным, но когда я пытаюсьдобавить больше участников в связанный список, то же самое не отражается.вторая запись о машине не добавляется, и при печати марки автомобиля печатается какая-то мусорная ценность.Будет полезно, если я узнаю, где я делаю ошибку, и в применении концепций структуры данных.Заранее спасибо.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
struct carinfo_t
{
char brand[100];
char model[100];
int year;
float value;
struct carinfo_t *next;
};
struct carinfo_t *createCarinfo(char *brand,char *model, int year,float value);
void printCarbase (struct carinfo_t *carbase);
struct carinfo_t * addCarinfo(struct carinfo_t *carbase, struct carinfo_t *carinfo);
void freeCarinfo (struct carinfo_t *carinfo,char *brand,char *model);
struct carinfo_t *removeCarinfo(struct carinfo_t *carbase, struct carinfo_t *carinfo);
int main()
{
struct carinfo_t *carbase='\0';
struct carinfo_t *carinfo='\0';
char choice;
bool flag=false;
char *brand; char *model; int year; float value;
while(!flag)
{
scanf("%c",&choice);
switch(choice)
{
printf("Command a/p/q:");
case 'a':
{
printf("Add a car:");
brand= (char *)malloc(100);
scanf("%s",brand);
model= (char *)malloc(100);
scanf("%s",model);
scanf("%d",&year);
scanf("%f",&value);
carinfo= (struct carinfo_t *)malloc(sizeof(struct carinfo_t));
carinfo->next= NULL;
carinfo=createCarinfo(brand,model,year,value);
carbase=addCarinfo(carbase,carinfo);
freeCarinfo(carinfo,brand,model);
break;
}
case 'p':
{
printCarbase(carbase);
break;
}
case 'q':
{
flag=true;
exit(0);
}
default:
{
break;
}
}
}
return 0;
}
struct carinfo_t *createCarinfo(char *brand, char *model, int year, float value)
{
struct carinfo_t *t;
char *bbrand;
char *bmodel;
t= (struct carinfo_t *)malloc(sizeof(struct carinfo_t));
bbrand= (char *)malloc(strlen(brand)+1);
bmodel= (char *)malloc(strlen(model)+1);
strcpy(bbrand,brand);
strcpy(bmodel,model);
t->year= year;
t->value= value;
strcpy(t->brand,bbrand);
strcpy(t->model,bmodel);
return (t);
}
struct carinfo_t *addCarinfo(struct carinfo_t *carbase, struct carinfo_t *carinfo)
{
struct carinfo_t *h,*t1;
h=carbase;
t1=(struct carinfo_t *) malloc(sizeof(struct carinfo_t));
if(h=='\0')
{
t1=carinfo;
t1->next=NULL;
h=t1;
h->next=t1->next;
}
else
{
t1=carinfo;
t1=(struct carinfo_t *) malloc(sizeof(struct carinfo_t));
t1->next=h->next;
h->next=t1;
}
printCarbase(h);
printCarbase(t1);
return h;
}
void freeCarinfo(struct carinfo_t *carinfo, char *brand, char * model)
{
free(carinfo);
free(brand);
free(model);
}
void printCarbase(struct carinfo_t *carbase)
{
struct carinfo_t *t;
t= (struct carinfo_t *)malloc(sizeof(struct carinfo_t));
t=carbase;
if(t == NULL)
{
printf("Empty list\n");
}
else
{
//printf("\n\nList elements are - \n");
do{
printf("-brand:%s\n",t->brand);
printf("-model:%s\n",t->model);
printf("-year:%d\n",t->year);
printf("-value:%f\n",t->value);
t = t->next;
}while(t != NULL);
}
}