Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Please help! C89 Function - How to modify append_to_list to insert players in an

ID: 3765701 • Letter: P

Question

Please help!
C89 Function - How to modify append_to_list to insert players in an ordered list( by last and first name) and the list will remain ordered after insertion? Ex: "John Smith" would be after "Bob Smith" but before "George Washington" in the list. Thanks for any help provided.

Here's the struct for player:
struct player{   
   int number;
   char first_name[NAME_LEN+1];
   char last_name[NAME_LEN+1];
   struct player *next;
};

here's the struct for append_to_list:

struct player *append_to_list(struct player *roster){
   struct player *cur, *new_node;

   new_node = malloc(sizeof(struct player));
   if (new_node == NULL) {
       printf("Database is full; can't add more players. Try deleting some first ");
       return roster;
   }

   printf("Enter player number: ");
   scanf("%d", &new_node->number);

   for (cur = roster;cur != NULL;cur = cur->next)
   if (cur != NULL && new_node->number == cur->number) {
       printf("Player already exists. ");
       free(new_node);
       return roster;
   }

   printf("Enter player last name: ");
   read_line(new_node->last_name, NAME_LEN);
   printf("Enter player first name: ");
   read_line(new_node->first_name, NAME_LEN);

   if(roster == NULL){
       roster = new_node;
       return roster;
   }else{
       for(cur = roster; cur->next!= NULL; cur = cur->next);
       cur->next = new_node;
       new_node->next = NULL;
       return roster;
   }
}

Explanation / Answer

// I changed your code. Please give the rest of the code so I can fix my code if there are any errors

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NAME_LEN 20

struct player{   
   int number;
   char first_name[NAME_LEN+1];
   char last_name[NAME_LEN+1];
   struct player *next;
};

struct player *append_to_list(struct player *roster){
   struct player *cur, *new_node;
   new_node = malloc(sizeof(struct player));
   if (new_node == NULL) {
       printf("Database is full; can't add more players. Try deleting some first ");
       return roster;
   }
   printf("Enter player number: ");
   scanf("%d", &new_node->number);
   printf("Enter player last name: ");
   read_line(new_node->last_name, NAME_LEN);
   printf("Enter player first name: ");
   read_line(new_node->first_name, NAME_LEN);


   for (cur = roster; cur != NULL | strcmp(cur->last_name, new_node) < 0; cur = cur->next)
       if (cur != NULL && new_node->number == cur->number) {
           printf("Player already exists. ");
           free(new_node);
           return roster;
       }
   if(roster == NULL){
       roster = new_node;
       return roster;
   }else{
       for(cur = roster; cur->next!= NULL; cur = cur->next);
       cur->next = new_node;
       new_node->next = NULL;
       return roster;
   }
}

int main(){

}