0

I'm not really getting the bigger picture with regards to linked lists. What needs to be done to link it? Also, there is an error with strncpy and for some reason on line 35 its not recognising struct trainset anymore and calls it a undefined variable.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
struct trainset {
    char name[50];
    int price;
    struct trainset *next;
};

void show_list(struct trainset *list);

int main (void){

    struct trainset *root;
    root = (struct trainset *)malloc(sizeof(struct trainset));
    strncpy(root ->name, " ", 50);
    root ->price = 0;
    root ->next = 0;

    struct trainset *first_train;
    first_train = (struct trainset *) malloc(sizeof(struct trainset));
    strncpy(first_train->name, "Fantasy Train Set", 50);
    first_train->price = 129;
    first_train->next = NULL;

    struct trainset *second_train;
    second_train = (struct trainset *)malloc(sizeof(struct trainset));
    first_train->next = second_train;
    strncpy(first_train->name, "Uncle Bobs train set", 50);
    second_train ->price = 69;
    second_train ->next = NULL;

    struct trainset *third_train;
    third_train = (struct trainset *)malloc(sizeof(trainset));
    second_train->next = third_train;
    strncpy(third_train ->name, "Budha Bread Train", 50);
    third_train ->price = 169;
    third_train ->next = NULL;

    show_list(root);
    return 0;
}

void show_list(struct trainset *list)
{
    while(list->next!=NULL)
    {
        printf("train set name: %s\nprice: %d", list->name, list->price);
        list = list->next;
    }
    printf("trainset name name: %s\n", list->name);
}
4
Contributors
3
Replies
5
Views
4 Years
Discussion Span
Last Post by sanket044
0
#include <string.h> 

(so the compiler knows about the function)

sizeof (struct trainset)

Edited by Moschops

0

As mentioned above, include string.h and replace "trainset" with "struct trainset" on line 34. Then, as far as your actual question goes:

What needs to be done to link it?

You're not linked the items you created to the root node. Add

root->next = first_train;

Also, you're assigning names to the wrong items.

strncpy(first_train->name, "Uncle Bobs train set", 50);

should be the second train.

Finally, in your loop condition you should check if the current item is not null, as that is the one you're dereferencing.

These changes result in the following:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

struct trainset
{
    char name[50];
    int price;
    struct trainset *next;
};

void show_list(struct trainset *list);

int main (void){

    struct trainset *root;

    root = (struct trainset *)malloc(sizeof(struct trainset));
    strncpy(root->name, " ", 50);
    root ->price = 0;
    root ->next = 0;

    struct trainset *first_train;
    first_train = (struct trainset *) malloc(sizeof(struct trainset));
    root->next = first_train;
    strncpy(first_train->name, "Fantasy Train Set", 50);
    first_train->price = 129;
    first_train->next = NULL;

    struct trainset *second_train;
    second_train = (struct trainset *)malloc(sizeof(struct trainset));
    first_train->next = second_train;
    strncpy(second_train->name, "Uncle Bobs train set", 50);
    second_train ->price = 69;
    second_train ->next = NULL;

    struct trainset *third_train;
    third_train = (struct trainset *)malloc(sizeof(struct trainset));
    second_train->next = third_train;
    strncpy(third_train ->name, "Budha Bread Train", 50);
    third_train ->price = 169;
    third_train ->next = NULL;

    show_list(root);
    return 0;
}

void show_list(struct trainset *list)
{
    while(list != NULL)
    {
        printf("train set name: \"%s\", price: %d.\n", list->name, list->price);
        list = list->next;
    }
}
0
root->next = first_train;

and
at 29 line

strncpy(second_train->name, "Uncle Bobs train set", 50);
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.