Lottozahlen



  • Habe folgendes Programm zur Ziehung der Lottozahlen geschrieben.
    Nach mehrfachen Ziehungen (j) hämgt sich das Programm bei mir auf.
    Könnt ihr mir sagen, woran das liegt?
    Danke!

    #include <iostream>
    #include <stdlib.h>                                                             // rand, srand
    #include <time.h>                                                               // time
    using namespace std;
    
    int main()
    {
    
        int i, n, rd, temp;
        int lotsort[6];                                                             // Array mit sortierten Zahlen
        int lotorg[6];                                                              // Array mit Zahlen in org. Reihenfolge
        int kontrolle[50] = {0};
        char op;
    
    cout << "Wollen Sie eine Ziehung starten? (j/n) ";
    cin  >> op;
    
    if(op == 'n') goto Ende;
    
    Neu:
    
        srand((unsigned) time(NULL));                                               // Initialisierung eines zufälligen Startwertes
    
    /* Ziehung der sechs Zahlen */
    
        for(n = 0; n < 6; n++)
        {
           do
           {
                  rd = 1 + rand() % 49;                                             // Zufallszahl zwischen 1 und 49      
           } while(kontrolle[rd]);                                                  // Wird wiederholt, falls Zahl schon gezogen
    
           kontrolle[rd] = 1;                                                       // Zahl als gezogen makiert
    
           lotorg[n] = rd;                                                          // Gezogene Zahl in Array eintragen
        }
    
    /* Kopie des Arrays */
    
       for(i = 0; i < 6; i++)
       lotsort[i] = lotorg[i];
    
    /* Sortierung des kopierten Arrays */
    
        for(i = 6; i > 0; i--)
        {
           for(n = 0; n < i; n++)
           {
                 if(lotsort[n] > lotsort[n + 1])                                    // Schleife, die Zahlen paarweise vertauscht,
                 {                                                                  // falls die 'linke' größer ist als die 'rechte'.
                        temp = lotsort[n];
                        lotsort[n] = lotsort[n+1];
                        lotsort[n+1] = temp;
                 }
           }
        }
    
    cout << "\n\nDie gezogenen Zahlen in originaler Reihenfolge: \n";
    
    for(i = 0; i < 6; i++)
    cout << lotorg[i] << '\t';
    
    cout << "\n\nDie gezogenen Zahl der Gr\x94sse nach: \n";
    
    for(i = 0; i < 6; i++)
    cout << lotsort[i] << '\t';
    
    cout << "\n\nWeitere Ziehung starten? (j/n)\n";
    cin  >> op;
    
    if(op == 'j') goto Neu;
    
    Ende:
         cout << "\n\nVielen Dank!\n\n";
         system("pause");
         return 0;
    
    }
    


  • Das erste was auffaellt ist dass du gotos benutzt, und das ist schlicht und einfach PFUI!
    Als naehstes faellt auf, dass du eine einzige, monolithische main-Funktion geschrieben hast, ohne Arbeit auszulagern. Vielleicht lohnts sich nicht, da eigene Klassen fuer anzulegen, aber ein paar der Arbeiten kann man getrost in einzelne Funktionen auslagern, das foerdert die Uebersichtlichkeit. Wenn du deinen Code dadurch ein wenig aufraeumst, dann findest du den Fehler evtl. auch selber. Fuer mich ists jetzt twas zu unuebersichtlich, um da aus dem Stehgreif den Haken an der Sache zu sehn.



  • Mir fällt außerdem auf, du brauchst für srand() und rand() die stdlib nicht, da reicht wenn du die time.h einbindest(was du ja schon hast)
    Außerdem heißt es

    srand(unsigned(time(NULL)))
    

    bei dir steht jedoch

    srand((unsigned) time(NULL))
    

    und dann, wie schon pumuckl sagte, hau das goto raus und arbeite mit Funktionen



  • Firefighter schrieb:

    Mir fällt außerdem auf, du brauchst für srand() und rand() die stdlib nicht, da reicht wenn du die time.h einbindest(was du ja schon hast)

    rand() und srand() sind in stdlib.h bzw. cstdlib.

    srand(unsigned(time(NULL)))
    

    bei dir steht jedoch

    srand((unsigned) time(NULL))
    

    Geht beides.



  • Mach doch einfach eine Klasse Neu:

    void Neu()
    {
    }
    

    und eine Klasse Ende

    void Ende()
    {
    }
    

    Und mach dann anstatt Goto Neu() oder Ende()



  • @lordjaxom...

    aber srand und rand gehen auch nur mit time.h



  • Firefighter schrieb:

    @lordjaxom...
    aber srand und rand gehen auch nur mit time.h

    Bei Dir vielleicht. Sie sind aber Bestandteil von stdlib. Alles andere ist Glückssache.



  • ok...gut dann hatte ich bis jetzt immer glück:) danke aber der aufklärung:)

    aber ohne mist, es läuft unter CodeBlocks und sogar Visual Studio...naja keine Ahnung...



  • Firefighter schrieb:

    aber ohne mist, es läuft unter CodeBlocks und sogar Visual Studio...naja keine Ahnung...

    Es kann ja sein, dass auf so ziemlich jeder Implementierung dieser Welt in time.h etwas enthalten ist, was es erforderlich macht, dort stdlib.h zu includen. Dann hast Du mit time.h natürlich auch gleich die stdlib.h drin. Aber verlassen kann man sich darauf nicht, vielleicht programmierst Du bereits morgen mit einem Compiler der das anders löst 😃



  • 🙂 ok du hast recht...habs verstanden 😃



  • [quote="<Marc>"]Mach doch einfach eine Klasse Neu:

    void Neu()
    {
    }
    

    und eine Klasse Ende

    void Ende()
    {
    }
    

    quote]

    Das was du gemacht hast ist eine Funktion!

    Eine Klasse sieht so aus:

    class klassenname
    {
    };
    


  • Opps sorry mein ich ja 🤡


Anmelden zum Antworten