#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; }