循环队列的入队 出队和遍历 请问哪里出错了? 输出不出来

#include <stdio.h>
#include <stdlib.h>
#define MAXQSIZE 100 //队列存储空间的初始分配量

//队列定义
typedef struct
{
char *base;
int front; //头指针,若队列不为空,指向队列头元素
int rear; //尾指针,若队列不为空,指向队尾元素的下一个位置
} SqQueue;

int main()
{
SqQueue Q;
char h;

int Initqueue(SqQueue * Q); //队列初始化
int Enqueue(SqQueue * Q, char e); //入队
char Dequeue(SqQueue * Q); //出队
int Printqueue(SqQueue * Q); //遍历队列

Initqueue(&Q);
printf("请输入你想入队的元素:");
scanf("%c",&h);
Enqueue(&Q, h);
printf("入队后SqQueue:");
Printqueue(&Q);
h = Dequeue(&Q);
printf("出队元素h=%c", h);
printf("\n出队后SqQueue:");
Printqueue(&Q);

return 0;
}

//队列初始化
int Initqueue(SqQueue *Q)
{
Q->base = (char *)malloc(MAXQSIZE * sizeof(char));
if (Q->base)
{
Q->front = Q->rear = 0;
return 0;
}
else
{
printf("ERROR!内存分配失败!");
exit (-1);
}
}

//入队
int Enqueue(SqQueue *Q, char h)
{
if ((Q->rear + 1) % MAXQSIZE == Q->front)
exit (-1); //队列满
Q->base[Q->rear] = h;
Q->rear = (Q->rear + 1) % MAXQSIZE;
return 0;
}

//出队
char Dequeue(SqQueue *Q)
{
char h;
if (Q->front == Q->rear)
exit (-1); //队列空
h = Q->base[Q->front];
Q->front = (Q->front + 1) % MAXQSIZE;
return h;
}

//遍历队列
int Printqueue(SqQueue *Q)
{
int i;
if (Q->front = Q->rear)
printf("空队列!\n");
else
{
for (i = Q->front; Q->rear != i % MAXQSIZE; i = (i + 1) % MAXQSIZE)
printf("%c ", Q->base[i]);
}
printf("\n");
}