I try to sort my name inputs alfabetically. Code works, but they sort in wrong order. Where do i make mistake?
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person{
char *name;
char *surname;
long int phonenumber;
};
struct node {
struct person *person;
struct node *next;
};
struct node* start=NULL;
struct node* temp;
struct node* temp2;
struct node* iter;
struct node* iter2;
struct node* min;
struct node* previter;
void addrecord(struct person *new_person) {
struct node *node = malloc(sizeof(struct node));
node->person = new_person;
node->next = NULL;
if (start == NULL) {
start = node;
}
else {
temp = start;
while(temp->next != NULL){
temp=temp->next;
}
temp->next=node;
/*tail->next = node;
tail = node;*/
}
}
void printPhoneBook() {
char s1 [50];
char s2 [50];
if(start == NULL) {
printf("\n Phonebook is empty!\n");
}
else if(start->next==NULL) {
printf("\n %s %s %d",start->person->name,start->person->surname,start->person->phonenumber);
}
else {
iter = start;
iter2 = start->next;
for(iter=start; iter!=NULL; iter=iter->next) {
min=iter;
for(iter2=iter->next; iter2!=NULL; iter2=iter2->next) {
strcpy(s1,min->person->name);
strcpy(s2,iter2->person->name);
if(s2 < s1) {
min=iter2;
if(iter==start){
temp=min->next;
min->next=iter;
iter->next=temp;
start=min;
min=iter2;
}
else if(iter!=NULL && min!=NULL) {
previter=start;
while(previter->next!=iter) {
previter=previter->next;
}
temp=min->next;
min->next=iter;
iter->next=temp;
previter->next=min;
}
else if(min!=NULL) {
previter=start;
while(previter->next!=iter) {
previter=previter->next;
}
temp=NULL;
min->next=iter;
iter->next=temp;
previter->next=min;
}
}
}
}
iter = start;
while(iter != NULL) {
printf("%s %s %d ", iter->person->name,
iter->person->surname,
iter->person->phonenumber);
iter = iter->next;
if(iter != NULL)
printf("\n");
}
printf("\n");
}
}
int main() {
int code;
int number;
while (code != 5) {
printf("\n\tPHONEBOOK\n\n");
printf(" [1] Add a contact \n [2] Delete a contact \n [3] Update a contact \n [4] Print phonebook \n [5] Exit \n");
printf(" Enter your choice: ");
scanf("%d",&code);
switch(code){
case 1:
;
struct person *newnode = malloc(sizeof(struct person));
newnode->name = malloc(100);
newnode->surname = malloc(100);
printf(" Enter the name: ");
scanf("%s",newnode->name);
printf(" Enter the surname: ");
scanf("%s",newnode->surname);
printf(" Enter the phone number: ");
scanf("%d",&newnode->phonenumber);
addrecord(newnode);
break;
case 2:
printPhoneBook();
break;
}
}
}