I'm trying to create a simple list where i can add members of a club (where data is val member id number, name, last name, age).
I'm having trouble populating the nodes with data of the members in the main function, when using the add_to_list function.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// Creating structure for node
struct test_struct
{
int val; // val is member id number
char name;
char lastn;
int age;
struct test_struct *next;
};
// declaring global head and curr pointers
struct test_struct *head = NULL;
struct test_struct *curr = NULL;
// creating a list
struct test_struct* create_list(int val, char* name, char* lastn, int age)
{
printf("\n creating list with head node as [%d] [%s] [%s] [%d] \n", val, name, lastn, age);
struct test_struct *ptr = malloc(sizeof(struct test_struct)); // creating list
if(NULL == ptr)
{
printf("\n Node creation failed \n");
return NULL;
}
ptr->val = val;
ptr->name = *name;
ptr->lastn = *lastn;
ptr->age = age;
ptr->next = NULL;
head = curr = ptr;
return ptr;
}
// add member to list
struct test_struct* add_to_list(int val, char *name, char *lastn, int age, bool add_to_end)
{
if(NULL == head)
{
return (create_list(val, name, lastn, age));
}
if(add_to_end)
{
printf("\n Adding node to end of list with data [%d] [%s] [%s] [%d] \n", val, name, lastn, age);
}
else
{
printf("\n Adding node to beginning of list with data [%d] [%s] [%s] [%d] \n", val, name, lastn, age);
}
struct test_struct *ptr = malloc(sizeof(struct test_struct));
if(NULL == ptr)
{
printf("\n Node creation failed \n");
return NULL;
}
ptr->val = val;
ptr->name = *name;
ptr->lastn = *lastn;
ptr-> age = age;
ptr-> next = NULL;
if (add_to_end)
{
curr-> next = ptr;
curr = ptr;
}
else
{
ptr -> next = head;
head = ptr;
}
return ptr;
}
//search a name in created list
struct test_struct* search_in_list(char name, char lastn, struct test_struct **prev)
{
struct test_struct *ptr = head;
struct test_struct *tmp = NULL;
bool found = false;
printf("\n Searching the list for the value [%s][%s]\n", name, lastn);
while(ptr != NULL) // searching loop
{
if(ptr->name == name && ptr->lastn == lastn)
{
found = true;
break;
}
else
{
tmp = ptr;
ptr = ptr->next;
}
}
return ptr;
if(true == found)
{
if(prev)
{
*prev = tmp;
return ptr;
}
else
{
return NULL;
}
}
}
//printing the list
void print_list(void)
{
struct test_struct *ptr = head;
printf("\n -----Printing list Start----- \n");
while(ptr != NULL)
{
printf("\n [%d] \n", ptr -> val);
printf("\n [%s] \n", ptr -> name);
printf("\n [%s] \n", ptr -> lastn);
printf("\n [%d] \n", ptr -> age);
ptr = ptr->next;
}
printf("\n -----Printing list end---- \n");
return;
}
//printing the list 2 is for printing age only
void print_list2(void)
{
struct test_struct *ptr = head;
printf("\n -----Printing list Start----- \n");
while(ptr != NULL)
{
printf("\n [%d] \n", ptr -> age);
ptr = ptr->next;
}
printf("\n -----Printing list end---- \n");
return;
}
// main function
int main(void)
{
char n, l;
struct test_struct *ptr = NULL;
// for adding member to list
add_to_list(123, "william", "shakespeare", 30, true);
add_to_list(124, "william", "gibson", 35, true);
add_to_list(125, "chuck", "palahniuk", 40, true);
add_to_list(126, "mario", "puzio", 50, true);
add_to_list(127, "umberto", "eco", 60, true);
add_to_list(128, "ezra", "pound", 125, true);
print_list();
// for searching name in list
ptr = search_in_list(n, l, NULL);
if(NULL == ptr)
{
printf("\n Search [name = %s] [lastn = %s] failed, no such element found \n", n, l);
}
else
{
printf("\n Search passed [name = %s] [lastn = %s] \n", ptr->name, ptr->lastn);
}
print_list();
return 0;
}