Programm startet nur einmal. Warum?

Die Datein sind zu groß um sie hier ran zu hängen ich hab den ganzen ordner mal gezipt und bei rapidshare hoch geladen.
Downloadlink:
http://rapidshare.com/files/348696823/Namensgenerator.rar.html
Ok. Aber wie gesagt, die .txt Dateien hätten gereicht...

\edit: Gut. bzw. nicht so gut...

Es ist wirklich schwierig sich durch deinen Code durchzufinden.

  • Du verwendest keine sinnvollen Namen. Was zum Teufel ist puffer1 puffer2 puffer3?
  • Du verwendest globale Variablen. Das ist eigentlich noch schlimmer.
  • Du verwendest goto.
  • Du hast unnötigerweise Code dupliziert.

Das Problem hat nun eigentlich mit Punkt 1) zu tun. Du hast in maennlichgenerieren puffer.at(...) geschrieben. Greifst aber mit Indizes aus randomzahlen2 zu. Da du anscheinend mehr männl. als weibl. Namen hast, löst das eine std::out_of_range Ausnahme aus.

Gruß

PS: Um ordentliche Zufallszahlen zu erhalten, sollte man so initialisieren (also die erste Zufallszahl verwerfen):
C++:
srand(time(NULL)); rand();
Und Zufallszahlen sollten nicht mit dem Modulo Operator auf einen bestimmten Bereich beschränkt werden. Das funktioniert nicht gut. Siehe http://cplus.kompf.de/artikel/random.html

Und warum erzeugst du nicht die Zufallszahlen einfach ad hoc? Die brauchst du doch nicht vorher berechnen und abspeichern?!

PPS: Außerdem könntest du auch die std::shuffle Funktion verwenden.
 
Zuletzt bearbeitet:
hmm ok und wie behebe ich das problem ?
puffer sind die vectoren wo die namen hinein gelesen werden und von dort auch wieder raus gelsen werden

puffer = weibliche namen
puffer2= männliche namen
puffer3= nachnamen

warum ist go to schlecht ?
warum sind globale variablen schlecht ?
was meinst du mit unnötigen code dupliziert ?

Zur verteidigung ich kenne c++ nur aus der Berufsschule und wir sind noch nicht über die theroie der arrays hinaus.
Also ich bin eignetlich total anfänger.
 
ok ich habe meinen fehler gefunden vielen Dank für deine Hilfe :)
Weiss ja net ob du dich mit Netzwerktechnik und Betriebssystemen bzw. Hardware auskennst.
Wenn nicht is mein Fachgebiet da kann ich helfen :)
Einfach melden wenn du mal was brauchst .
Danke
Lg
Barti
 
hmm ok und wie behebe ich das problem ?
puffer sind die vectoren wo die namen hinein gelesen werden und von dort auch wieder raus gelsen werden

puffer = weibliche namen
puffer2= männliche namen
puffer3= nachnamen
Wenn ich in deinen Code schaue, weiß ich auch was die bedeuten. Die Namen der Variablen haben nur überhaupt keinen Bezug zum Inhalt.

Benennen wir die Variablen doch mal um. puffer => vornamen_w, puffer2 => vornamen_m, puffer3 => nachnamen usw. für die randomzahlen

Dann sieht die Schleife aus Funktion maennlichgenerieren so aus:
C++:
for ( int x = 0; x < anzahl; x++) 
  d << vornamen_w.at(rand_vornamen_m.at(x)) 
    << ";" 
    << nachnamen.at(rand_nachnamen_rand.at(x))
    << endl;
Fälllt dir jetzt etwas auf?
warum ist go to schlecht ?
Weil es zu Spaghetti-Code führt, da der normale sequentielle Ablauf unterbrochen wird.
warum sind globale variablen schlecht ?
Weil man irgendwann überhaupt nicht mehr weiß wo evlt. überall auf die Variablen zugriffen wird.
was meinst du mit unnötigen code dupliziert ?
Deine ganzen Prozeduren die alle gleich aussehen. Das macht den Code schlecht wartbar weil du dementsprechend immer dran denken mußt an x Stellen den Code zu ändern. Verwende doch einfach Parameter:
C++:
void dateioeffnen(const char* dateiname, ifstream& datei) {
    datei.open (dateiname, ifstream::in);

    if (!datei.is_open())                                // sequenz für das öffnen der datei
    {
        cout << "Zweite Datei Fehlerhafte benachrichtigen Sie den Administrator" << endl; //Fehler Benarichtigung
    }
    else
    {
        cout << dateiname << " erfolgreich geoeffnet"<<endl;
    }
}

int main() {
..
    dateioeffnen("nachnamen.txt", testdatei);
    dateioeffnen("mvornamen.txt", testdatei2);
    dateioeffnen("wvornamen.txt", testdatei3);
}
Und rücke deinen Code ordentlich ein. Du mußt nicht alles so dicht wie möglich hintereinanderklatschen. ;)

Gruß
 
Zurück