main
No notes
Syntax:
C++
//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); }