键盘输入循环缓冲区问题

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define OVERFLOW -2
#define INFEASIBLE -1
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
#define MAXQSIZE 10
typedef char QElemType;
struct SqQueue
{
 QElemType *base;
 int front;
 int rear;
};

int InitQueue(SqQueue *Q)
 { // 构造一个空队列Q
   Q->base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));
   if(!Q->base) // 存储分配失败
     exit(OVERFLOW);
   Q->front=Q->rear=0;
   return OK;
 }

int QueueEmpty(SqQueue Q)
 { // 若队列Q为空队列,则返回TRUE,否则返回FALSE
   if(Q.front==Q.rear) // 队列空的标志
     return TRUE;
   else
     return FALSE;
 }

int EnQueue(SqQueue *Q,QElemType e)
 { // 插入元素e为Q的新的队尾元素
   if((Q->rear+1)%MAXQSIZE==Q->front) // 队列满
     return ERROR;
   Q->base[Q->rear]=e;
   Q->rear=(Q->rear+1)%MAXQSIZE;
   return OK;
 }

int DeQueue(SqQueue *Q,QElemType *e)
 { // 若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR
   if(Q->front==Q->rear) // 队列空
     return ERROR;
   *e=Q->base[Q->front];
   Q->front=(Q->front+1)%MAXQSIZE;
   return OK;
 }

void main()
{//模拟键盘输入循环缓冲区
 char ch1,ch2;
 SqQueue Q;
 int f;
 InitQueue(&Q);
 for(;;)
 {
  for(;;) //第1个进程
  {
   printf("A/n");
   if(kbhit())
   {
    ch1=getch();
    if(ch1==','||ch1=='.') break; //第1个进程正常中断
    f=EnQueue(&Q,ch1);
    if(f==ERROR)  //循环队列满时强制中断第1个进程
    {
     printf("循环队列已满!/n");
     break;
    }
   }
  }
  while(!QueueEmpty(Q)) //第2个进程
  {
   DeQueue(&Q,&ch2);
   putchar(ch2);  //显示输入缓冲区的内容
  }
  if(ch1=='.')break;
 }
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值