码迷,mamicode.com
首页 > 其他好文 > 详细

环形缓冲区: ringbuf.c

时间:2018-01-02 15:23:38      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:std   double   add   man   lease   code   scanf   printf   else   

#cat  aa.c
/*ringbuf .c*/
#include<stdio.h>
#include<ctype.h>

#define NMAX 8
int iput = 0; /* 环形缓冲区的当前放入位置 */
int iget = 0; /* 缓冲区的当前取出位置 */
int n = 0; /* 环形缓冲区中的元素总数量 */
double buffer[NMAX];

/* 环形缓冲区的地址编号计算函数,如果到达唤醒缓冲区的尾部,将绕回到头部。
环形缓冲区的有效地址编号为:0到(NMAX-1)
*/
int addring (int i)
{
    return (i+1) == NMAX ? 0 : i+1;
}

/* 从环形缓冲区中取一个元素 */
double get(void)
{
    int pos;
    if (n>0){
        pos = iget;
        iget = addring(iget);
        n--;
        return buffer[pos];
    } else {
        printf("Buffer is empty\n");
        return 0.0;
    }
}

/* 向环形缓冲区中放入一个元素*/
void put(double z)
{
    if (n<NMAX) {
        buffer[iput]=z;
        iput = addring(iput);
        n++;
    } else {
        printf("Buffer is full\n");
    }
}

int main(void)
{
    char opera[5];
    double z;
    do {
        printf("Please input p|g|e?");
        scanf("%s", &opera);
            switch(tolower(opera[0])){
                case ‘p‘: /* put */
                    printf("Please input a float number?");
                    scanf("%lf", &z);
                    put(z);
                    break;
                case ‘g‘: /* get */
                    z = get();
                    printf("%8.2f from Buffer\n", z);
                    break;
                case ‘e‘:
                    printf("End\n");
                    break;
                default:
                    printf("%s - Operation command error! \n", opera);
            }/* end switch */
    } while(opera[0] != ‘e‘);

    return 0;
}

环形缓冲区: ringbuf.c

标签:std   double   add   man   lease   code   scanf   printf   else   

原文地址:https://www.cnblogs.com/muahao/p/8176596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!