значение мусора при печати второй записи Carinfo с использованием связного списка в C - PullRequest
0 голосов
/ 06 октября 2018

/ Девиз этой программы состоит в том, чтобы динамически добавлять элементы автомобиля и печатать их / всякий раз, когда я запускаю код, первое добавление, когда 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...