Zunächst einmal Stil:
- Wichtig: Alle globalen Variablen weg! Die sorgen nur für komplizierte Fehler.
- Mach unnötige Kommentare weg. Zum Beispiel:
//um strings zu benutzen
#include <string>
Ach!
- Mach falsche Kommentare weg. Zum Beispiel:
//z.B. für .c_str()
#include <sys/stat.h>
Bestimmt nicht!
- Mach irreführende Kommentare weg. Zum Beispiel:
//Liefert Dirs
struct dirent* entry;
Das liefert gar nichts, das ist eine Variable, die enthält höchstens etwas.
- return mit Klammern ist eher eine ungewöhnliche Schreibweise
- Mach unnötige Anweisungen weg:
teacherfile.close();
return(0);
Und genau beim return würde der Dateistream automatisch zugehen (mal Referenz zum fstream-Destruktor durchlesen - Dateien schließen sich in C++ automatisch wenn sie aus dem Scope gehen). Also völlig unnötig.
- Ich war ja nie ein Fan von erst Deklarieren, später definieren, wenn man sowieso den gesamten Quellcode in eine einzige Datei schreibt. Aber ist Geschmackssache. Erinnert mich jedenfalls immer an den Stil von Jürgen Wolf, daher eventuell zu unrecht negativ belegt.
- Ich persönlich mag auch deinen Einrückungsstil nicht (auch wenn er durchaus so üblich ist). Das musst du nicht verbessern, aber ich gucke nicht so intensiv über das Programm, da ich es schlecht lesen kann.
Technik:
- Es wäre eine Überlegung wert, die verbreitete und plattformunabhängige Boost-Bibliothek zu nutzen. Die hat auch einen Teil extra zum Arbeiten mit Dateisystemen (Boost Filesystem) und kapselt diesen ganzen C-Stil-Systemkram schön weg.
- Das gilt ebenso für Datums- und Zeitverarbeitung
- Lerne die Container richtig zu benutzen!
teachers.resize(teachers.size() + 1);
teachers.at(zaehler) = output;
zaehler++;
Du programmierst die wohl wichtigste Methode des vectors, push_back, extrem umständlich nach.
- Const correctness! Googeln, verstehen, anwenden! Das hilft dir, sehr viele Fehler gleich zur Compilezeit zu entdecken.
- Potentiell große Datenpakete (string) sollten per (const-)Referenz an Funktionen übergeben werden, das spart Kopierarbeit.
Fehler die mir auffallen:
- Logikfehler:
while(teacherfile.good()){
getline(teacherfile, output);
// Verarbeitung
}
Direkt aus einem der vielen schlechten Lehrbücher übernommen. Falls du so eines haben solltest: Wegwerfen!
Du prüfst auf Erfolg (...good()), dann machst du etwas fehleranfälliges(getline), dann verarbeitest du das Ergebnis. Jetzt denk mal nach, was passiert, wenn der zweite Schritt schief geht. Typischerweise willst du so etwas wie
while(getline(teacherfile, output))
{
// Verarbeitung
}
Das war jetzt schon jede Menge, manches pingelig, manches ernst. Ich denke, du hast erst einmal zu tun. Wenn du alles (oder wenigstens vieles) verbessert hast, kann man noch einmal gucken. Dann wird auch alles viel übersichtlicher sein, dann kann man mehr verstehen und besser helfen.