"else" block is executed every time even after the "if" statement is true

Advertisements

In the delete function, the else part is executed every time even after the if statement is true. How can I solve that problem?

#include<stdio.h>
#include<stdlib.h>
#define MAX 10
int front=-1,rear=-1;
int Q[MAX];
void insert();
void delete();
void display();
void peek();

int main(){
int n;
while(1){
    printf("Enter your operation:-\n1.Insert\n2.Delete\n3.Peek\n4.Display\n5.Exit\n");
    scanf("%d",&n);
     switch(n){
        case 1:
        insert();
        break;
        case 2: 
        delete();
        break;
        case 3: 
        peek();
        break;
        case 4: 
        display();
        break;
        case 5: 
        exit(0);
    }
    }

return 0;
}

void insert(){
    int i;
    printf("Enter your number:\n");
    scanf("%d",&i);
    if(rear==MAX-1)
        printf("The queue is overflow");
        else if(front==-1 && rear==-1)
            front=rear=0;
        else
        rear++;
        Q[rear]=i;  
    }
void delete(){
    int v;
    if(front==-1 || front>rear)
    printf("Queue is underflow\n");
    else
    v=Q[front];
    front++;
    printf("Your deleted number is:%d\n",v);

}
void peek(){
    if(front==-1 || front>rear)
    printf("Queue is underflow\n");
    else
    printf("The first number is:%d\n",Q[front]);
}
void display(){
    int i;
    if(front==-1 || front>rear)
     printf("Queue is underflow\n");
     else
     printf("Your created Queue is:\n");
     for(i=front;i<=rear;i++){
         printf("%5d\n",Q[i]);
     }
}`

>Solution :

You need to use a compound statement as for example

else
{
    v=Q[front];
    front++;
    printf("Your deleted number is:%d\n",v);
}

Other wise this code snippet

else
v=Q[front];
front++;
printf("Your deleted number is:%d\n",v);

is equivalent to

else
{
    v=Q[front];
}
front++;
printf("Your deleted number is:%d\n",v);

Pay attention to that for example the function insert as is has a bug

void insert(){
    int i;
    printf("Enter your number:\n");
    scanf("%d",&i);
    if(rear==MAX-1)
        printf("The queue is overflow");
    else if(front==-1 && rear==-1)
        front=rear=0;
    else
        rear++;
    Q[rear]=i;  
}

It seems you mean

void insert(){
    if(rear==MAX-1)
    { 
        printf("The queue is overflow");
    }
    else
    {
        int i;
        printf("Enter your number:\n");
        scanf("%d",&i);
        if( front==-1 )
            front = 0;
        else
            rear++;
        
        Q[rear]=i;  
    }
}

Usually one of reasons of bugs is a bad formatting of the code.

Leave a ReplyCancel reply