I'm making simple patient managing program using circular queue but q.rear always have "0" value while executing exit_hos()
I thought that addq() makes variable "rear" different, but It doesn't work.
is_empty() always return front and rear is same.
I think I'm misunderstanding some codes and memory concepts.
how can I fix these functions?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 50
#define MAX_QUEUE_SIZE 6
typedef struct {
    char** value;
    int front;
    int rear;
} Queue;
void init_queue(Queue* q) {
    q->value = (char**)malloc(sizeof(char*) * MAX_QUEUE_SIZE);
    q->front = 0;
    q->rear = 0;
}
int is_full(Queue* q) {
    if (((q->rear +1) % MAX_QUEUE_SIZE) == q->front)
        return 1;
    else
        return 0;
}
int is_empty(Queue* q) {
    if (q->front == q->rear)
        return 1;
    else
        return 0;
}
void addq(Queue* q, char* value) {
    q->rear = (q->rear+1) % MAX_QUEUE_SIZE;
    q->value[q->rear] = value;
    printf("addq: %s", value);
    return;
}
char* deleteq(Queue* q) {
    q->front = (q->front + 1) % MAX_QUEUE_SIZE;
    return q->value[q->front];
}
void arrive(Queue q) {
    int input;
    char name[MAX_SIZE];
    printf("\n");
    printf("1. submit\n");
    printf("2. cancel\n");
    scanf("%d", &input);
    if (input == 1) {
        if (is_full(&q) == 1) {
            printf("Service is not available\n");
        }
        else {
            printf("name: ");
            scanf("%s", name);
            addq(&q, name);
        }
    }
    else if (input == 2) {
        return;
    }
    else {
        printf("input error\n");
        return;
    }
    return;
}
void exit_hos(Queue q) {
    char patient[MAX_SIZE];
    if (is_empty(&q) == 1)
    {
        printf("There is no patient waiting\n");
    }
    else {
        strcpy(patient, deleteq(&q));
        printf("patient: %s", patient);
    }
    return;
}
int main() {
    int input;
    Queue q;
    init_queue(&q);
    while (1)
    {
        printf("\nINPUT\n");
        printf("1. Arrive hostpital\n");
        printf("2. Exit hospital\n");
        printf("3. service exit\n");
        scanf("%d", &input);
        
        if (input == 1)
            arrive(q);
        else if (input == 2) {
            exit_hos(q);
        }
            
        else if (input == 3) {
            printf("exit\n");
            return 0;
        }
        else {
            printf("input error\n");
        }
    }
    free(q.value);
    return 0;
}
 
     
    