Programm startet nur einmal. Warum?

Barti20

Grünschnabel
Hall Ihr lieben,

ich habe einen Namensgenerator geschrieben er funktioniert auch wunderbar. Aber leider nur ein mal und dann kann man ihn erst wieder nach einer warte Zeit wieder benutzen. Ich kann mir einfach nicht erklären wo das problem liegt :(
Ich hoffe ihr könnt mir helfen.
Code:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <vector>
#include <string>
#include <fcntl.h>
#include <io.h>

using namespace std;

ifstream testdatei;
ifstream testdatei2;
ifstream testdatei3;
string names;
string names2;
string names3;
vector<string> puffer;
vector<string> puffer2;
vector<string> puffer3;
int newtext;
int anzahl;
int i;
vector<long int> randomzahlen;
vector<long int> randomzahlen2;
vector<long int> randomzahlen3;
string generate;
 
    
void dateioeffnen ()  //weibliche namen öffnene
{
                                                  
    testdatei.open ("wnamen.txt", ifstream::in);   //variable für die zu öffnende Datei
    
    if (0==testdatei)                                // sequenz für das öffnen der datei
    {
       cout << "Erste Datei Fehlerhaft benachrichtigen Sie den Administrator" << endl; //Fehler Benarichtigung 
    }
    else
    {
        cout << "Erste Datei erfolgreich geoeffnet"<<endl;
    }
    
}
void dateioeffnen2 ()	//männliche namen öffnen
{
	testdatei2.open ("mnamen.txt", ifstream::in);   //variable für die zu öffnende Datei
    
    if (0==testdatei2)                                // sequenz für das öffnen der datei
    {
       cout << "Zweite Datei Fehlerhafte benachrichtigen Sie den Administrator" << endl; //Fehler Benarichtigung 
    }
    else
    {
        cout << "Zweite Datei erfolgreich geoeffnet"<<endl;
    }
}

void dateioeffnen3 () //nachnamen öffnen
{
	testdatei3.open ("nachnamen.txt", ifstream::in);   //variable für die zu öffnende Datei
    
    if (0==testdatei3)                                // sequenz für das öffnen der datei
    {
       cout << "Dritte Datei Fehlerhafte benachrichtigen Sie den Administrator" << endl; //Fehler Benarichtigung 
    }
    else
    {
        cout << "Dritte Datei erfolgreich geoeffnet"<<endl;
    }
}
void dateilesen() //weibliche namen lesen 
{
     
    while(testdatei.good()) {            //while schleife liest datei zeile für zeile aus 
        getline(testdatei, names, ';');  // liest zeilen (zu lesende datei, zu speichernde variable, lese kriterien)
        puffer.push_back(names);          //ausgelesene datein in vector schreiben 
        //cout << names << endl;          // vector ausgabe 
                    
        
    } 
}

void dateilesen2() //mänliche namen lesen
{
    
    while(testdatei2.good()) {            //while schleife liest datei zeile für zeile aus 
        getline(testdatei2, names2, ';');  // liest zeilen (zu lesende datei, zu speichernde variable, lese kriterien)
        puffer2.push_back(names2);          //ausgelesene datein in vector schreiben 
        //cout << names << endl;       // vector ausgabe 
                   
        
    } 
}
   
void dateilesen3() //nachnamen lesen 
{
  
    while(testdatei3.good()) {            //while schleife liest datei zeile für zeile aus 
        getline(testdatei3, names3, ';');  // liest zeilen (zu lesende datei, zu speichernde variable, lese kriterien)
        puffer3.push_back(names3);          //ausgelesene datein in vector schreiben 
        //cout << names << endl;    // vector ausgabe
                     
        
    } 
}   
     

void random ()                            //random funktion zum generien der zu schreibenden zeilen
{
     cout << "Bitte geben Sie die Anzahl der zu generierenden Namen ein." << endl; 
     cin >> anzahl;
     cout << "Die " << anzahl << " Namen werden generiert." << endl;
     srand (time(NULL));

//randomzeile für weibliche namen 
for (int x=0;x<anzahl;x++)                   // festlung der anzahl der zu generienden namen 
{
randomzahlen.push_back(rand()%puffer.size()); // Zahlen berreich festlegung
//cout << randomzahlen.at(x) << endl;                   
}

//randomzeile für männliche namen
for (int i=0;i<anzahl;i++)                   // festlung der anzahl der zu generienden namen 
{
randomzahlen2.push_back(rand()%puffer2.size()); // Zahlen berreich festlegung
//cout << randomzahlen2.at(i) << endl;                   
}

//randomzeile für nachnamen 
for (int k=0;k<anzahl;k++)                   // festlung der anzahl der zu generienden namen 
{
randomzahlen3.push_back(rand()%puffer3.size()); // Zahlen berreich festlegung
//cout << randomzahlen2.at(i) << endl;                   
}

}


void weiblichgenerieren() //weiblich namen generieren 
{
    
    fstream d; //stream "intetger"
    d.open("generate.csv", ios::out); //zu schreibende datei
   for ( int x = 0; x < anzahl; x++) d << puffer.at(randomzahlen.at(x)) << ";" << puffer3.at(randomzahlen3.at(x))<<endl;// zufallszeilen auslesen und in datei schreiben

    d.close(); //datei stream schließen
    ifstream LogFile("c:\\generate.csv");//überprüfen ob datei erstellt wurde 
    if(LogFile)
    cout << "Die Datei wurde erstellt bitte bennen Sie Die Datei um" << endl;
}

void maennlichgenerieren()
{
    
    fstream d;
    d.open("generate.csv", ios::out);
   for ( int x = 0; x < anzahl; x++) d << puffer.at(randomzahlen2.at(x)) << ";" << puffer3.at(randomzahlen3.at(x))<<endl;

    d.close();
    ifstream LogFile("c:\\generate.csv");
    if(LogFile)
    cout << "Die Datei wurde erstellt bitte bennen Sie Die Datei um" << endl;
}

int main(int argc, char *argv[])
{
cout << "~~~~~~~~Herzlich Willkommen beim Namensgenerator~~~~~~~~" << endl << endl; 

cout << "Bitte waehlen Sie aus, welches Geschlecht sie generieren moechten." << endl<< endl; 
anfang:;
cout << "Geben sie fuer Weiblich eine 1 ein oder fuer Maennlich eine 2." << endl;
int geschlechteingabe;
cout << "Bitte geben sie das gewuenschte Geschlecht an: " ; 
cin >> geschlechteingabe;
cout << endl;

if(geschlechteingabe < 1)
{
 cout << "!!ACHTUNG"<<endl<<endl;
 cout << "Sie haben eine falsche Eingabe gemacht bitte versuchen sie es noch einmal." << endl<<endl;
 goto anfang;
}
 else 
 {
      if (geschlechteingabe > 2)
      {
       cout << "!!ACHTUNG"<<endl<<endl;
       cout << "Sie haben eine falsche Eingabe gemacht bitte versuchen sie es noch einmal." << endl<<endl;
       goto anfang;
       }
                           

	if (geschlechteingabe==2)
		{
            cout<< " Sie haben das maennliche Geschlecht gewaehlt." << endl <<endl;
			dateioeffnen();
        	dateioeffnen2();
        	dateioeffnen3();
        	dateilesen();
        	dateilesen2();
        	dateilesen3();
			random();
			maennlichgenerieren();
		}
		else 
		{
			if (geschlechteingabe==1)
            {
                cout<< " Sie haben das weibliche Geschlecht gewählt." << endl <<endl;
            	dateioeffnen();
            	dateioeffnen2();
            	dateioeffnen3();
            	dateilesen();
            	dateilesen2();
            	dateilesen3();
            	random();
            	weiblichgenerieren();
                }
		
	}
}
    
            
    system("PAUSE");
    return 0;
    return EXIT_SUCCESS;
}

die txt datein sind so aufgebaut:
Code:
test1;test2;test3;test4;...
falss das relevant ist.

Ich sag schon mal danke im voraus :)
Lg
Barti
 
Also das Problem liegt darin. Man macht das Programm auf kann damit auch den gewünschten effekt erzielen und das ganze auch ein paar mal hinter einander kann man das programm ohne probleme aufrufen und ausführen. Doch danach geht er bist zum erstellen der Datei und dann bricht es ab das ganze sieht dann so aus :
http://www.bilder-hochladen.net/files/a72x-j-jpg.html

So nach dem das passiert ist muss man dann gute 5 min warten bis man das programm erst wieder benutzen kann. Ich kann mir nicht erklären woran das liegt.
 
Also das Problem liegt darin. Man macht das Programm auf kann damit auch den gewünschten effekt erzielen und das ganze auch ein paar mal hinter einander kann man das programm ohne probleme aufrufen und ausführen. Doch danach geht er bist zum erstellen der Datei und dann bricht es ab das ganze sieht dann so aus :
http://www.bilder-hochladen.net/files/a72x-j-jpg.html
Dann drücke auf den "Programm debuggen" Button und schau wo das Problem in deinem Code ist. Apropos, du kannst hier auch Bilder bzw. Anhänge hochladen.

Übrigens, wenn mehrere Funktionen bis auf ein paar Platzhalter völlig gleich aussehen, solltest du dich evtl. fragen ob du daraus nicht eine Funktion machen kannst.

Gruß
 
Ich habe es schon einmal Debuggt aber nichts gefunde :(
Ich habe auch nochmal alles kontrolliert aber es geht einfach nicht ...
Also am Code liegt es nicht oder ich seh es einfach nur nicht...
Er sagt ja es ist ein Run Time Error was genau bedeutet das ?
 
Ich habe es schon einmal Debuggt aber nichts gefunde :(
Wenn du auf den Button drückst, dann öffnet sich doch der Debugger genau mit der Stelle wo das Problem aufgetreten ist. Wechsle dann in die Aufrufstack-Ansicht und gehe solange aufwärts bis du irgendwo in deinem Code rauskommst.

\edit: Wenn dir das zu kompliziert ist, dann führe dein Programm gleich im Debugger aus (und gehe notfalls Zeile für Zeile durch das Programm).
Also am Code liegt es nicht oder ich seh es einfach nur nicht...
Natürlich liegt es an deinem Code. Woran denn sonst?
Er sagt ja es ist ein Run Time Error was genau bedeutet das ?
Das bedeutet, das ein Fehler zur Laufzeit aufgetreten ist.

Gruß
 
nein ich benutz dev c++ , visual studio c++ habe ich auch drauf aber der will die schrift weise nicht wie ich sie habe.
Ich komm damit nicht klar ...
im visual studio gibts ja sowas wie #include oder sowas net der will irgendwas mit using system.xxx;
und nen using namespace std; da gibts dann irgenwie using namespace ApplicationConsole; wo der dann dahinter mein er brauch da so eine Klamer "{". Also damit komme ich überhaupt net klar das sieht für mich aus wie ne komplett andere Programmiersprache.
 
nein ich benutz dev c++ , visual studio c++ habe ich auch drauf aber der will die schrift weise nicht wie ich sie habe.
Ich komm damit nicht klar ...
im visual studio gibts ja sowas wie #include oder sowas net der will irgendwas mit using system.xxx;
und nen using namespace std; da gibts dann irgenwie using namespace ApplicationConsole; wo der dann dahinter mein er brauch da so eine Klamer "{". Also damit komme ich überhaupt net klar das sieht für mich aus wie ne komplett andere Programmiersprache.
Bitte halte dich an unsere Netiquette und verfasse deine Beiträge in lesbarer Form.

In DevC++ gibt es auch einen Debugger. Du solltest evtl. lieber Code::Blocks oder CodeLite verwenden, da ist die Integration besser.

Du mußt im Visual Studio ein normales C++ ohne CLR Unterstützung anlegen. Kein C# Projekt.

Häng mal deine .txt Dateien hier an, dann werde ich das mal testen.

Gruß
 
Zuletzt bearbeitet:
Zurück