[ create a new paste ] login | about

Link: http://codepad.org/4X9gbxCc    [ raw code | output | fork ]

C, pasted on Jul 11:
#include <stdio.h>

int buffer[16]; // Ein Puffer mit 16 Einträgen
int num = 0; // Anzahl der Einträge im Puffer

void add(int value);
int can_read();
int read();
void print();

int main()
{
  add(10);
  add(20);
  add(30);
  print();
  add(40);
  add(50);
  print();

  printf("lese: %d\n", read());
  print();

  printf("lese: %d\n", read());
  print();

  add(60);
  print();

  while (can_read()) {
    printf("lese: %d\n", read());
    print();
  }

  return 0;
}

void add(int value)
{
  // Wenn noch Platz im Puffer ist, dann einfach hinten anfügen.
  if (num < 16)
    buffer[num++] = value;
  // else beep(); // Das BIOS piept, wenn der Puffer voll ist. Was auch sonst.
}

// Gibt zurück, ob was im Puffer steht.
int can_read()
{
  return (num > 0);
}

// Liest einen Eintrag aus dem Puffer aus.
int read()
{
  if (!can_read())
    return -1;

  int result = buffer[0]; // Wir lesen den ersten Eintrag aus.
  num--; // Jetzt ist ein Eintrag weniger im Puffer

  // Alle Einträge nach vorne schieben um den ersten Eintrag zu überschreiben.
  int i;
  for (i = 0; i < num; i++) {
    buffer[i] = buffer[i + 1];
  }

  return result;
}

void print()
{
  int i;

  printf("inhalt: ");

  for (i = 0; i < 16; i++) {
    if (i < num)
      printf("%d ", buffer[i]);
    else
      printf("?? ");
  }
  printf("\n");
}


Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
inhalt: 10 20 30 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 
inhalt: 10 20 30 40 50 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 
lese: 10
inhalt: 20 30 40 50 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 
lese: 20
inhalt: 30 40 50 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 
inhalt: 30 40 50 60 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 
lese: 30
inhalt: 40 50 60 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 
lese: 40
inhalt: 50 60 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 
lese: 50
inhalt: 60 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 
lese: 60
inhalt: ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 


Create a new paste based on this one


Comments: