programm stürzt ab...



  • jap in wordlist sind die ersten fehler
    wenn die datei nicht da ist wird böse
    ausserdem ist des

    return contents[zZahl];
    

    auch nicht ohne



  • wordlist.txt existiert natürlich, und wo ist:

    //...
    

    ???
    aber warum stüzt das prog ab, kanns vielleicht an devc++ liegen

    das

    return contents[zZahl]
    

    löst doch kein absturz aus keine ahnung kann ich nur ma ausprobieren, und so schlimm ist die form auch nicht! 😡



  • ach und das formatieren scheint verloren gegangen zu sein.

    #include <iostream>
    #include <cstdlib>
    #include <vector>
    #include <iterator>
    #include <string>
    #include <time.h>
    #include <fstream>
    
    using namespace std;
    
    int zufallsbegrenzer;
    string shiffrierteswort;
    ////////////////////////////////////////////////////////////////////////////////
    int random (int bereich) {
        long sek;
        time(&sek);
        srand( (unsigned) sek);
        //srand (time (0));
        int zufall = ( rand() % bereich - 1 );
        //return zufall;
        }
    ////////////////////////////////////////////////////////////////////////////////
    string wordlist (int zZahl)
    {
        vector<string> contents;
    
        ifstream FileIn("wordlist.txt");
        if (FileIn) // Falls FileIn gültig ist.
        {
            // Solange kein Fehler auftritt und nicht eof
            for (string ReadString; getline(FileIn, ReadString); )
                contents.push_back(ReadString); // Aktuelle Zeile in den Vektor einfügen
        }
        zufallsbegrenzer = contents.size();
     return contents[zZahl];
    }
    ////////////////////////////////////////////////////////////////////////////////
    void ausgabewort ( int Laenge, short durchgangscounter ) {
        int x;
        shiffrierteswort = ("");
    
        cout<<"Sie haben "<< 2 * Laenge <<" Versuche!"
            <<"\nWort: ";
    
        //cout<<"Noch 16 Versuche!"
            //<<"\nWort: ";
        for ( x = 0; x < Laenge; x++ ) {
            shiffrierteswort += ("-");
            cout<<"-";
            }
        cout<<endl;
        }
    ////////////////////////////////////////////////////////////////////////////////
    void hangman ( int hangmannummer ) { switch ( hangmannummer ) {}       
        }
    ////////////////////////////////////////////////////////////////////////////////
    
    int main(/*int argc, char *argv[]*/)
    {
        bool spiel = false;  
        int x;
        int rand;
        short durchgangscounter = 0;
    
        wordlist (1); //um "zufallsbegrenzer" zu initialisieren, verbesserungsbedürftig 
        string ratewort = wordlist( random ( zufallsbegrenzer ) );
        string eingabe;
    
        ausgabewort ( ratewort.length(), durchgangscounter );
    
        while ( eingabe != "exit" && eingabe.length() < 2 ) {
    
        hangman ( durchgangscounter );
        ++durchgangscounter;  
        cin>>eingabe;
    
                for ( x = 0; x < ratewort.length(); x++ ) {
                                if ( eingabe[0] == ratewort[x] ) {
                                shiffrierteswort.replace ( x, 1, eingabe );
                                durchgangscounter--;
                                }
                }
    
        system ( "cls" );
        cout<<"Noch "<< 2 * ratewort.length() - durchgangscounter <<" Versuche!"
            <<"\nWort: "<<shiffrierteswort<<endl;
    
        if ( ratewort == shiffrierteswort ) {
        cout<<"\n\ngewonnen\n";
        break;
        }    
    
        if ( durchgangscounter == 2*ratewort.length() - 1 )
        break;
        }       
    
      system("PAUSE");	
      return 0;
    }
    

    so besser ist mir nicht gleich aufgefallen



  • Eines deiner Probleme liegt hier:

    int zufall = ( rand() % bereich - 1 );
    

    rand() % bereich liefert Werte zwischen 0 und bereich - 1, dh zufall kann Werte zwischen -1 und bereich - 2 annehmen. Wobei -1 zu einer Zugriffsverletzung in wordlist() führt. Nach oben könnten auch noch Probleme auftreten, so genau hab ich deinen Code allerdings nicht studiert.



  • mmh, stimmt das mistding stürzt auch wenn ich die "-1" weglasse, wie könnts denn besser aussehen mit "+1" hauts jedenfalls nicht hin, könnt ja ma den source kompillieren.



  • Also nachdem ich angesprochene Stelle korrigiert hab

    int zufall = rand() % bereich;
    

    konnte ich das Programm nicht mehr zum Absturz bewegen. Was aber nicht heissen soll, dass es keine Fehler mehr gibt. Ganz im Gegenteil, es bedarf noch einiger Überarbeitung.
    Zuerst solltest du mal versuchen alle Warnungen zu beseitigen, denn Warnungen sind eigentlich (bis auf wenige Ausnahmen) compilierbare Fehler (oder hast du etwa alle Warnungen abgestellt 😮 ).
    Sollte dein Programm trotzdem noch abstürzen, wirf mal den Debugger an und sag uns in welcher Zeile das Programm abstürzt.



  • j einige fehler hats noch wirklich, aber schonmal danke.
    rein interessenhalber habt ihr beim wörtererraten mal "b" eingetippt warum zählt der counter gerade bei "b" hoch anstatt sein ursprünglichhen wert zu behalten.
    denn counter-- + counter++ = x und nicht x+1. und gerade bei b? 😮
    danke aber wegen dem absturzproblem



  • ähm, stürzt immer noch ab, wird wo am compiler liegen welchen benutzt du?



  • kfee schrieb:

    ähm, stürzt immer noch ab, wird wo am compiler liegen welchen benutzt du?

    Ja, das ist ne einfache Lösung... Und in 99,99% der Fälle falsch. Die meisten Compiler generieren recht zuverlässigen Code.
    Such lieber nochmal ordentlich, benutz den Debugger etc.

    MfG Jester



  • es stürzt aber immer ab wenn ich ne zufallszahl generieren will, und da gibt es nicht besonders viele möglichkeiten


Anmelden zum Antworten