简单环形缓冲 C实现

 
#include <stdio.h>
#include <ctype.h>
#define NMAX 3 //定义

int iput=0;  /*put index*/
int iget=0;  /*get index*/
int n=0; // total number default

double buffer[NMAX];

/**
//该函数循环放置元素标号
  @param i : 元素对应角标
  @return gt NMAX : %NMAX
**/
int addring(int i)
{
   return (i+1)==NMAX ? 0:i+1;
}

/*
get element  from buffer
*/
double get(void)
{
  int pos; //index point
  if(n>0)
  {
   pos=iget;  //default value 0
   iget=addring(iget);
   n--;  //total is decreable
   return buffer[pos];
  }else
 {
 printf("Buffer is empty\n");
 return 0.0f;
 }
}

//put element
void put(double z)
{
   if(n<NMAX)
 {
 buffer[iput]=z;  //buffer get element,defalut 0
 iput=addring(iput); 
 n++;
 }
else
 {
 printf("Buffer is full\n");
 }
}

//test
int main()
{
 char opera[5];
 double z;
 do
  {
  printf("please input put(p) |get)(g) |exit(e):\n");
  scanf("%s",&opera);
   switch (tolower(opera[0]))
 {
   case 'p': // input
          printf("please input a float number\n");
          scanf("%lf",&z);  // 
          put(z); // put element
           break;
   case 'g':  //get out
        z=get();
        printf("%8.2f from Buffer",z);
          break;
   case 'e':
        printf("END\n");
        break;
   default :
        printf("%s -Operation command error !\n",opera);
 }
}while(opera[0]!='e');

return 0;
}

你可能感兴趣的:(简单环形缓冲 C实现)