main

by Jonas on February 23rd, 2012
No notes
Syntax: C++
Show lines - Hide lines - Show in textbox - Download
//Schritt 1: Person einlesen und Zeile ausgeben
#include <iostream>
using namespace std;
#include <string.h>
#include <string>
 
#include <stdlib.h>
#include <fstream>
 
struct person
{
char name[60];
char id[20];
char url[60]; //raus?
//int ordnungsnummer; //dient als zaehlvariable des array, raus aus struct
};
 
enum zustand {imNamen, inId, ignoriereUrl, vorOrdnungsnummer, inOrdnungsnummer}; //inUrl=Ignorieren
 
struct person personen[800];
int ordnungsnummer = 0; //Array Zaehlvariable
 
void verarbeitePersonen();
void druckePersonen(int i);  // Jonas: hier hast du vergessen mit reinzuschreiben, dass eine int mitgegeben wird. vorher: void druckePersonen();
void suchePersonen();
 
 
int main()
{
verarbeitePersonen();        // Jonas: Den Teil habe ich ausgelagert, den Dateiaufruf ebenfalls. Dann hast du das Pointerproblem nicht!
for (int i = 1; i<800; i++) druckePersonen(i);  //Jonas: Das gibt erstmal alles aus. Muss aber hinter "verarbeitePersonen();" kommen :)
suchePersonen();            // Jonas: suchePersonen hat vorhin nicht funktioniert, da du gesucht hast bevor du eingelesen hast! Da kann er natürlcih keine Daten finden
}                           // Jonas: Das war auch der einzige Fehler weshalb das nicht funktioniert hatte mit dem Suchen. Jetzt gehts!
 
void verarbeitePersonen()   //Jonas: Hier wird ausgelesen. Im Grunde alles was vorher in der int main() stand kopiert. Die ist dadurch aufgeräumter und es fällt dir später leichter, für aufgabe 2 alles in eine bibliothek auszulagern (mehr ist aufgabe 2 ja auch nicht ^^ Header Datei und Lib)
{
    char puffer[100],zeichen;
    int zaehler;
    enum zustand zustand;
 
    ifstream datei;
 
    datei.open("personen.txt"); //ab hier auslagern
 
    zustand=vorOrdnungsnummer;//Startzustand
    zaehler=0;
    for (;;)
    {
        datei.get(zeichen);
        if (datei.eof())break;
        switch(zeichen)
        {
 
        case '"':
            break;
 
        case ' ':
 
            if (zustand == vorOrdnungsnummer)//entweder doppeltes Leerzeichen vor Ordnungnummer: dann ignorieren...
            {
                break;
            }
 
            if (zustand == inOrdnungsnummer)//oder Leerzeichen nach Ordnungsnummer, dann: war das die Ordnungsnummer
            {
             puffer[zaehler]='\0';
             zaehler=0;
             ordnungsnummer=atoi(puffer); //schreibe in Puffer, mache aus den Ziffern eine Zahl (personen.ordnungsnummer)
             zustand=imNamen; //erwarte Name der Person
             //cout << "Gelesen: " << "Ordnungsnummer: " << personen.ordnungsnummer << endl;
             break;
            }
 
            if (zustand==imNamen)// war das ein Name
            {
 
               datei.get(zeichen); //pruefe ob Leerzeichen letztes=also Ende des Namen ist: nimm Zeichen nach Leerstelle mit auf...
                 if (zeichen=='(')            //...ist es ein ( ->ist Name zu Ende
                 {
                  puffer[zaehler]='\0';
                  zaehler=0;
                  strcpy(personen[ordnungsnummer].name,puffer);
                  zustand=inId;//erwarte wir nun ID
                  personen[ordnungsnummer].name; //im Array abspeichern
                  //cout << "Gelesen: " << "Name: " << personen.name << endl;
                 }
                 else      //...ist es kein ( ->lege das Zeichen zurueck
                 {
                  datei.putback(zeichen);
                  puffer[zaehler]=' ';
                  zaehler++;
                 }
               break;
            }
        case '(':
            zaehler=0;
            break; //ignoriere Klammer-auf
        case ')': //das war ID
            puffer[zaehler]='\0';
            zaehler=0;
            strcpy(personen[ordnungsnummer].id,puffer);
            zustand=ignoriereUrl;
            personen[ordnungsnummer].id;
            //cout << "Gelesen: " << "ID: " << personen.id << endl;
            break;
 
        case '\n':
            zaehler=0;
            zustand=vorOrdnungsnummer; //soll URL ignorieren
            break;
 
        default:
            if (zustand==vorOrdnungsnummer) { zustand=inOrdnungsnummer; }
            puffer[zaehler]=zeichen;
            zaehler++;
            break;
        }
    }
    datei.close();
}
 
void druckePersonen(int i)
{
    cout << i << " Name: " << personen[i].name << " ID: " << personen[i].id << endl;
 
}
 
void suchePersonen(){
    int ausgabePerson;
 
    cout << "Welche Person möchten sie ausgeben?";
    cin >> ausgabePerson;
 
    druckePersonen(ausgabePerson);
}
 

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS