/* simulazione di un produttore, che legge caratteri */ /* e un consumatore, che li scrive. */ #include #include #define MAXBUF 10 char buf[MAXBUF+1]; int dim = MAXBUF+1, inizio=0, fine=0; int succ (int i); int nonvuoto (void); int nonpieno (void); void push (int x); int pop (void); int main (void) { int c; for (;;) { if ( (float)rand()/32767.0 > 0.5 && nonvuoto() ) putchar ( pop() ); else if ( nonpieno() ){ if ( (c=getchar()) != EOF ) push(c); else break; } } while ( nonvuoto () ) putchar ( pop() ); return 0; } int succ (int i) { return i+1 % dim; } int nonvuoto (void) { return inizio != fine; } int nonpieno (void) { return succ(fine) != inizio; } void push (int x) { buf[fine] = x; fine = succ (fine); } int pop (void) { int x; x = buf[inizio]; inizio = succ(inizio); return x; }