Search code examples
ccomparisonsingly-linked-listc-stringsfunction-definition

this c program runs without error but search,delete,update funtion is not working


#include<stdlib.h>
#include<string.h>
#include<stdio.h>
struct Node
{
    char firstname[100];
    char lastname[100];
    char number[100];
    char mail[100];
    struct Node *next;
}*head;

void insert(char* firstname,char* lastname,char* number,char* mail)
{
    struct Node * node=(struct Node *)malloc(sizeof(struct Node));
    strcpy(node->firstname, firstname);
    strcpy(node->lastname, lastname);
    strcpy(node->number, number);
    strcpy(node->mail, mail);
    node->next=NULL;
    if(head==NULL)
    {
        head=node;
    }
    else{
        node->next=head;
        head=node;
    }
    
}
void search(char* firstname)
{
    struct Node * temp = head;
    while(temp!=NULL){
        if(temp->firstname==firstname){
        printf("Contact Found");
        printf("Firstname:%s\n",temp->firstname);
        printf("Lastname:%s\n",temp->lastname);
        printf("PhoneNumber:%s\n",temp->number);
        printf("Mail Id:%s\n",temp->mail);
        return;
        }  
        temp = temp->next;
    }
    printf("%s is not found in the contact \n",firstname);
}
void update(char* firstname)
{
    struct Node * temp=head;
    while(temp!=NULL){
        if(temp->firstname==firstname){
          printf("Contact Found");
          printf("Enter the new Phone number for %s\n",temp->firstname);
          scanf("%s",temp->number);
          printf("Contact Updated Successfully\n");
          return;
        }
        temp=temp->next;
    }
    printf("%s is not found in the contact \n",firstname);
}
void delete(char* firstname)
{
    struct Node * temp1 = head;
    struct Node * temp2 = head; 
    while(temp1!=NULL){
        if(temp1->firstname==firstname){
          printf("Contact Found for deleting\n");
          if(temp1==temp2){
              head = head->next;
              free(temp1);
          }
          else{
              temp2->next = temp1->next;
              free(temp1);
          }
          printf("Contact deleted Successfully\n");
          return;
        }
        temp2=temp1;
        temp1=temp1->next;
    }
    printf("%s is not found in the contact \n",firstname);
}
void display()
{
    struct Node * temp=head;
    while(temp!=NULL){
        printf("Firstname:%s\n",temp->firstname);
        printf("Lastname:%s\n",temp->lastname);
        printf("PhoneNumber:%s\n",temp->number);
        printf("Mail Id:%s\n",temp->mail);
        temp = temp->next;
        
    }   
}
int main()
{
    head = NULL;
    int choice;
    char firstname[100];
    char lastname[100];
    char number[100];
    char mail[100];
    printf("-------Welcome--------\n ");
    printf("1.Insert a Contact\n2.Search a Contact\n3.Delete a Contact\n4.Update a Contact\n5.Display all the Contacts");
    do
    {
        printf("\nEnter Choice: ");
        scanf("%d", &choice);
        switch(choice)
        {
            case 1:
                printf("Enter Firstname:");
                scanf("%s",firstname);
                printf("Enter Lastname:");
                scanf("%s",lastname);
                printf("Enter PhoneNumber:");
                scanf("%s",number);
                printf("Enter Mail Id:");
                scanf("%s",mail);
                insert(firstname,lastname,number,mail);
                break;
            case 2:
                printf("Enter Firstname to Search:");
                scanf("%s",firstname);
                search(firstname);
                break;
            case 3:
                printf("Enter Firstname to Delete:");
                scanf("%s",firstname);
                delete(firstname);
                break;
            case 4:
                printf("Enter Firstname to Update:");
                scanf("%s",firstname);
                update(firstname);
                break;
            case 5:
                display();
                break;
        }
        
    }while (choice != 0);
    
}

this c program runs without error but search,delete,update funtion is not working...you can refer the img for more details. tommorrow i have to submit my mini project..so if anyone knows c program please help me Enter Choice: 2
Enter Firstname to Search:durai
durai is not found in the contact

Enter Choice: 3
Enter Firstname to Delete:durai
durai is not found in the contact

Enter Choice: 4
Enter Firstname to Update:durai
durai is not found in the contact these are the errors which i'm getting


Solution

  • For example within the function search you are trying to compare two pointers that point to different extents of memory

    if(temp->firstname==firstname){
    

    So the condition evaluates to false even if the pointed strings are equal each other. You have to use the standard string function strcmp

    For example

    if( strcmp( temp->firstname, firstname ) == 0 ){
    

    Pay attention to that all function parameters that have the type char * should be declared as having the type const char *.

    Also it is a bad idea when the functions depend on the global variable head. For example in this case you can not create more than one list in a program.