用C语言如何实现一个环状的缓冲?~!!!就是不断的检查一个数组里面的数据!!急求~~!
用C语言如何实现一个环状的缓冲?~!!!就是不断的检查一个数组里面的数据!!急求~~!
[解决办法]
看是不是你想要的?
#include<stdio.h>#include<ctype.h>#define NMAX 8int 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': printf("Please input a float number?"); scanf("%lf", &z); put(z); break; case 'g': 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;}