FIFO in C



  • Hallo Leute,

    ich bräuchte einen einfachen C-Code für einen Ringbuffer indem ich ein paar Werte zwischenspeichern kann. Bin nicht gerade der C Experte also möglichst einfach.

    Gruß



  • oke oke, luigi pronto pronto ungedüldige kunde ist da



  • Ganz einfach global-array-based:

    Header:

    typedef int Element; /* Dein Typ. */
    
    void put(Element); /* Element hinzufügen. */
    Element get(void); /* Element abrufen. */
    

    Source:

    #include <assert.h> /* Für defensive programmierung! */
    #include "header.h" /* Header oben beschrieben. */
    
    #define SIZE 64 /* Array-Größe = Max Elemente. */
    
    static unsigned int index = 0; /* Aktueller Index. */
    static unsigned int num   = 0; /* Aktuelle Anzahl an Elemente. */
    static Element      arr[SIZE]; /* Array mit Elementen. */
    
    void put(Element e)
    {
      assert(num != SIZE); /* Überlauf prüfen. */
    
      {
        /* Index berechnen. */
        int i = index + num;
        if (i >= SIZE)
          i -= SIZE;
    
        /* Element hinzufügen. */
        arr[i] = e;
        ++num;
      }
    }
    
    Element get(void)
    {
      assert(num != 0); /* Elementanzahl prüfen. */
    
      {
        /* Element abrufen. */
        Element e = arr[index++];
    
        /* Index berechnen. */
        if (index == SIZE)
          index -= SIZE;
    
        /* Element zurückgeben. */
        --num;
        return e;
      }
    }
    

    Beispielprogramm:

    #include <stdio.h>
    #include "header.h"
    
    int main(void)
    {
      put(5);
      put(1);
      put(9);
      put(4);
    
      printf("%d\n", get());
      printf("%d\n", get());
      printf("%d\n", get());
      printf("%d\n", get());
    
      return 0;
    }
    

    Ausgabe:

    5
    1
    9
    4
    




  • traurig dass es auf solche unverschämten posts auch noch ernsthafte antworten gibt



  • thraurihk schrieb:

    traurig dass es auf solche unverschämten posts auch noch ernsthafte antworten gibt

    Idioten die zu dumm sind um C zu lernen sind auf sowas leider angewiesen. Der Code von eben schreibt ein geübter Programmierer (nicht einmal ein Experte) aus dem Kopf.



  • Janjan schrieb:

    thraurihk schrieb:

    traurig dass es auf solche unverschämten posts auch noch ernsthafte antworten gibt

    Idioten die zu dumm sind um C zu lernen sind auf sowas leider angewiesen. Der Code von eben schreibt ein geübter Programmierer (nicht einmal ein Experte) aus dem Kopf.

    vermutlich hätte selbst der letzte idiot aber auch selbst google verwenden können um seine hausaufgaben zu erledigen. erinnert mich an tggc damals:

    http://www.games-net.de/hosted/tggc/index.php?cat=8&page=5



  • Gott vergibt auch diesem jungen Sünder, denn er liebt all seine Kinder.

    Lasset uns beten.



  • Danke noch für eure hilfe.

    Gruß


Anmelden zum Antworten