Probleme bei rand()



  • Hallo, ich bekomme immer eine Fehlermeldung bezüglich des random-Ausdrucks, weiß aber nicht, was daran falsch sein soll. Habe schon etliche Foren und Seiten durchforstet und es klappt immer noch nicht. Kann mir da einer weiterhelfen?
    Es geht darum die Lottozahlen, also Zahlen zwischen 1 und 49, zu ziehen.
    Die ganzen anderen Funktionen meines Programmes funktionieren einwandfrei, nur der random-Ausdruck macht noch Probleme.

    Bibliotheken, die ich eingebunden habe (nicht nur auf die Funktion bezogen, sondern auf das ganze Programm):

    #include <iostream>
    #include <string.h>
    #include <windows.h>    
    #include <time.h>	 
    #include <stdio.h>
    

    Funktion:

    void ziehung(int *l){
         cout << "Ziehung der Lottozahlen\n Die Lottozahlen lauten: \n";
              for(int i=0;i<=6;i++){	
                   cout << i+1 << ". Zahl: " << l[i]=rand() % 49 + 1;
    
                   for(int j=0;j<i;j++){
                        if(l[i]==l[j]){	
                             i--;
                        }
                   }
         }
    }
    


  • leandra020 schrieb:

    Hallo, ich bekomme immer eine Fehlermeldung

    Und die ist geheim?


  • Mod

    Rangfolge der Operatoren beachten! Du willst:

    cout << i+1 << ". Zahl: " << (l[i]=rand() % 49 + 1);
    

    Dein jetziger Code entspricht:

    (cout << i+1 << ". Zahl: " << l[i]) = (rand() % 49 + 1);
    

    Womit hoffentlich klar sein sollte, warum das nicht funktioniert hat.

    Allgemeine Tipps:
    Zuweisungen in anderen Ausdrücken sind ein ziemliches Anti-Pattern. Nicht nur ist es unmittelbar verantwortlich für dein Problem hier, es ist auch äußerst erschwerend beim Verständnis deines Codes. Jemand, der dein Programm nachvollziehen möchte, muss jede Zeile Zeichen für Zeichen genau lesen, um zu erfassen, dass da eine Zeile, die aussieht wie eine Ausgabe, auch noch nebenher eine wichtige Variable ändert 👎
    Viel besser wäre daher:

    l[i]=rand() % 49 + 1;
    cout << i+1 << ". Zahl: " << l[i];
    

    Dein jetziges Programm ist C mit cout und hat nichts mit C++ zu tun. Vermutung: Schlechter Lehrer und/oder schlechtes Lehrbuch. Wie lernst du C++? Die Empfehlung ist, entweder lernst du richtig C oder richtig C++, sonst kannst du am Ende keines von beidem. Gutes Lehrmaterial ist das wichtigste beim Lernen, sonst gewöhnt man sich nur schlechte Angewohnheiten an, die man nur schwer wieder los wird, sofern man nicht lange vorher frustriert aufgibt.



  • Jetzt macht das auch Sinn, vielen Dank für die schnelle Antwort 😉
    Ich mache zurzeit mein Fachabitur mit Schwerpunkt Informationstechnik, laut Lehrer lernen wir C++. Der Unterricht läuft aber eher so ab: "Hier ist die Aufgabe. Fangt an zu programmieren, bei Fragen wendet euch an Google."



  • Tja, dann bleibt nur, dass du, wenn du wirklich C++ lernen möchtest (nicht nur für die Schule), dir ein Buch kaufst oder aus einer Bibliothek ausleihst (es bieten sich an: "Der C++-Programmierer" von Breymann und "C++ Primer" von Lippman)

    Übrigens: bei mir damals haben die Lehrer entschieden, kein Turbo Pascal mehr zu unterrichten, weil das schon ein paar Schüler kannten. Wir haben dann Prolog in der Schule gelernt, weil das niemand (weder Schüler noch Lehrer) kannte und wir als Schüler damit keinen Vorsprung hatten 🙂



  • leandra020 schrieb:

    Der Unterricht läuft aber eher so ab: "Hier ist die Aufgabe. Fangt an zu programmieren, bei Fragen wendet euch an Google."

    Lasst euch das nicht zweimal sagen! Ein gutes Buch wurde schon genannt (Breymann, mit 40 Euro nicht zu teuer), dazu stackoverflow (sehr gute Codeschnipsel und Antworten) und cppreference (die Sprachreferenz) - bitte auf Englisch lesen, die deutsche Übersetzung ist teilweise holperig. Damit habt ihr beste Chancen, euren Pauker schon nach kurzer Zeit so richtig alt aussehen zu lassen. Das wird dem leid tun, euch auf Google verwiesen zu haben.


Log in to reply