speichern von random_shuffle Abfolgen



  • Hi!
    Habe versucht, ein Programm zu erstellen, das eine zufällige Abfolge von Zahlen erstellt und dann speichert. Ging schief:

    #include <iostream>
    #include <algorithm>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    
    int Random(int n)
    {
    return rand() % n ;
    }
    
    int main(){
    
    srand(time(0));
    
    int Reihe1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    
    random_shuffle(Reihe1, Reihe1 + 9, Random);
    
    int a1=Reihe1[1];
    int a2=Reihe1[2];
    int a3=Reihe1[3];
    int a4=Reihe1[4];
    int a5=Reihe1[5];
    int a6=Reihe1[6];
    int a7=Reihe1[7];
    int a8=Reihe1[8];
    int a9=Reihe1[9];
    
    cerr<<a1<<a2<<a3<<a4<<a5<<a6<<a7<<a8;
    cerr<<"\n"<<a1;
    cerr<<"\n"<<a2;
    cerr<<"\n"<<a3;
    cerr<<"\n"<<a4;
    cerr<<"\n"<<a5;
    cerr<<"\n"<<a6;
    cerr<<"\n"<<a7;
    cerr<<"\n"<<a8;
    cerr<<"\n"<<a9;
    
    return 0;
    }
    

    Der Letzte integer a9 ist ein wirrwarr, der so ganz nebenbei NICHT das tut, was er tun sollte.
    (liegts an meinem PC? wahrscheinlich nicht.)
    Könnte mir jemand meinen Fehler ausbügeln?

    VD im Voraus 😕



  • Array-Indizes fangen bei 0 an...



  • Ach jahh Danke das wars
    mvg



  • 👍

    Eine for-Schleife wäre noch einfacher. Btw.: Wieso schreibst Du nach cerr?



  • soll ich jetzt cout nehmen?
    cout,cerr,clog...
    macht für mich keinen wesentlichen unterschied.

    Ach ja, for schleife, ich bin noch nicht soweit das ich weiß wie man mit ner forschleife in diesem Programm was besser macht - natürlich geht das mit der aber bestimmt.



  • Hacker schrieb:

    soll ich jetzt cout nehmen?
    cout,cerr,clog...
    macht für mich keinen wesentlichen unterschied.

    Naja, die Dinger haben ja unterschiedliche Verwendungszwecke. Selbst, wenn es nur Aliasnamen auf das gleiche Streamobjekt sind, drückst Du damit unterschiedliche Dinge aus (für den Leser Deines Programms). std::cerr ist eigentlich für die Ausgabe von Fehlern gedacht. Unter Linux macht es auch einen Unterschied, welches Streamobjekt man benutzt. Unter Windows m.W.n. nicht, aber wie gesagt, die Aussage stimmt nicht.



  • cerr ist einfach lustiger;)



  • Tachyon schrieb:

    Unter Windows m.W.n. nicht, aber wie gesagt, die Aussage stimmt nicht.

    Selbst unter Windows kann es einen Unterschied machen, wohin du schreibst.

    PS: Du kannst übrigens auch Werte direkt aus dem Array schreiben.



  • CStoll schrieb:

    Tachyon schrieb:

    Unter Windows m.W.n. nicht, aber wie gesagt, die Aussage stimmt nicht.

    Selbst unter Windows kann es einen Unterschied machen, wohin du schreibst.

    PS: Du kannst übrigens auch Werte direkt aus dem Array schreiben.

    Präziser: MSVC. In den mir bekannten Versionen referenzieren cout, cerr und clog jeweils das gleiche Streamobjekt.



  • Hast du schonmal versucht, die Ausgaben deiner Programme umzuleiten (ala prog > out.txt )? cout entspricht stdout, cerr und clog entsprechen stderr - und im Normalfall landen die Ausgaben von allen Standard-Streams direkt auf der Konsole, daher sieht man den Unterschied erst auf den zweiten Blick.



  • CStoll schrieb:

    Hast du schonmal versucht, die Ausgaben deiner Programme umzuleiten (ala prog > out.txt )? cout entspricht stdout, cerr und clog entsprechen stderr - und im Normalfall landen die Ausgaben von allen Standard-Streams direkt auf der Konsole, daher sieht man den Unterschied erst auf den zweiten Blick.

    Nein, habe ich noch nicht. Allerdings sind die Adressen von cout und cerr bei mir identisch. Wenn sich die Ausgabe trotzdem umleiten lässt, muss da irgendwelche Compilermagie im Spiel sein.


Anmelden zum Antworten