2013-09-24 2 views
1

Информация из файла читается в Автосортировке «новый автомобиль». Мне нужно использовать функцию «sll_add» ниже, чтобы добавить эту информацию в один любимый список типов Carlist i, названный «list». Мне просто сложно понять, как все начинается. Спасибо за любую помощь.Как добавить объекты в одиночный список

int main (void)//main function 
{ 

FILE *fp;//file pointer 
fp = fopen("car_inventory.txt", "r");//opens the car inventory data within the program. 
int num=0;//vairable created to keep track of the information. 
int year;//, choice;//variables use for user input. 
char str1[100];//string created to ensure the program reads the information from the original file correctly. 
Carlist list;//creates a string of type "Car" named file to hold up to 100 cars. 
Car newcar;//Car variable to store the info from the file. 

list *last=num; 

if (fp) 
    { 
     {     
     while(!feof(fp))//takes input from the data file. 
      { 
     fgets(str1,50, fp); 
     sscanf(str1,"%d %s %[^\n]s", &newcar.year, newcar.make, newcar.model); 

     fgets(str1,50, fp); 
     sscanf(str1,"%[^\n]s", newcar.style); 

     fgets(str1,50, fp); 
     sscanf(str1,"%[^\n]s", newcar.color); 

     fgets(str1,50, fp); 
     sscanf(str1,"%s", newcar.mileage); 

     fgets(str1,50, fp); 
     sscanf(str1,"%c", &newcar.air_condition); 

     fgets(str1,50, fp); 
     sscanf(str1,"%s", newcar.inventory_num); 

     fgets(str1,50, fp); 
     sscanf(str1,"%lf", &(newcar).price); 

     fgets(str1,50, fp); 
     sscanf(str1,"%[^\n]s", newcar.previous_owner); 

     fgets(str1,50,fp); 


     num++; 
     sll_add(*newcar, &list); 
      } 
     } 

return 0; 


#define MAX_CARS  100 

/* Type definitions */ 

typedef struct car 
{ 
    int year; 
    char make[25]; 
    char model[25]; 
    char style[25]; 
    char color[20]; 
    char mileage[8]; 
    char air_condition; 
    char inventory_num[16]; 
    double price; 
    char previous_owner[30]; 
    struct car *next; 

} Car; 


typedef struct carlist 
{ 
    Car *first; 
    Car *last; 
} Carlist; 


void sll_init(Carlist *l); 
Car *sll_first(Carlist *l); 
Car *sll_end(Carlist *l); 
Car *sll_next(Car *current, Carlist *l); 
Car *sll_retrieve(Car *element, Carlist *l); 
void sll_delete(Car *c, Carlist *l); 
void sll_delete_year(Carlist *l, int year); 
void sll_add(Car *newcar, Carlist *l); 


    #endif 

ответ

1

Начать с самого начала. Во-первых, ваш Carlist должен быть инициализирован, поэтому вам необходимо выполнить функцию sll_init(). Это очень просто, так как все, что нужно сделать, это установить указатели first и last на нуль. Это может выглядеть примерно так:

void sll_init(Carlist *l) 
{ 
    l->first = l->last = NULL; 
} 

Далее, вам нужно, чтобы иметь возможность добавлять записи в свой список, так что вы должны конкретизации sll_add(). Это может выглядеть примерно так:

void sll_add(Car *newcar, Carlist *l) 
{ 
    Car *new = malloc(sizeof(*new)); 
    *new = *newcar; 
    new->next = NULL; // just to be safe in case newcar wasn't properly initialized 

    if (l->first == NULL) 
    { 
     // the list is empty, so add the first entry 
     l->first = l->last = new; 
    } 
    else 
    { 
     // the list is not empty, so append a new entry to the end 
     l->last->next = new; 
     l->last = new; 
    } 
} 

С этим вы должны быть в состоянии начать.

+0

Спасибо, что вам поможет. – user2812294