Heiligenkalender Basisimplementation – Stufe 2

06.02.2017 03:28 Uhr
#include <iostream>
using namespace std;
#include <string.h>
#include <stdlib.h>
#include <fstream>


struct festtag
{
    struct festtag *naechster;
    char name[64];
    int tag;
    int monat;
} ;
enum zustand {imNamen,imTag,imMonat};

struct festtag *ladekalender(ifstream &datei);
struct festtag *ladeheiligen(ifstream &datei);

int main()
{
    struct festtag *wurzel=NULL;

    ifstream datei;

    datei.open("heilige.txt");

    wurzel=ladekalender(datei);

    while(wurzel!=NULL)
    {
        cout << wurzel->name << " wird am " << wurzel->tag << "." << wurzel->monat
             << " gefeiert." << endl;
        wurzel=wurzel->naechster;
    }
    {
        /* bitte ignorieren; nur bis zu Ihrer Anmeldung notwendig */
        int x;
        cin >> x;
    }

}

struct festtag *ladekalender(
        ifstream                   &datei)
// Read all
{
    struct festtag *wurzel=NULL, *jetzt, *neu;

    while(!datei.eof())
    {
        neu=ladeheiligen(datei);
        if (neu!=NULL)
        {
            if (wurzel==NULL) wurzel=neu;
            else jetzt->naechster=neu;
            jetzt=neu;
        }
    }

    return wurzel;
}

struct festtag *ladeheiligen(
        ifstream                    &datei)
// Read one record
{
    struct festtag *fest;
    char puffer[100],zeichen;
    int zaehler;
    enum zustand zustand;

    fest=new struct festtag;
    fest->naechster=NULL;

    zustand=imNamen;
    zaehler=0;
    for (;;)
    {
        datei.get(zeichen);
        if (datei.eof()) return NULL;
        switch(zeichen)
        {
        case '/':
            puffer[zaehler]='\0';
            zaehler=0;
            strcpy(fest->name,puffer);
            zustand=imTag;
            break;
        case '.':
            if (zustand!=imNamen)
            {
                puffer[zaehler]='\0';
                zaehler=0;
                fest->tag=atoi(puffer);
                zustand=imMonat;
            }
            else
            {
                puffer[zaehler]=zeichen;
                zaehler++;
            }
            break;
        case '\n':
            if (zustand!=imMonat)
            {
                cout << "Verstümmelte Festangabe: " << puffer << endl;
                delete fest;
                return NULL;
            }
            puffer[zaehler]='\0';
            zaehler=0;
            fest->monat=atoi(puffer);
            zustand= imNamen;
            return fest;
            break;
        default:
            puffer[zaehler]=zeichen;
            zaehler++;
            break;
        }
    }
}

Dateien: Stufe 2

Schlagwörter: