Seite 1 von 1

[solved]Immer die gleiche Zufallszahl....

Verfasst: 7. April 2011 11:11
von redbulls
Hi
ich hab ein Problem. Ich möchte einen Zufälligen HEX Code erzeugen, aber er wird nicht zufällig erzeugt.

Code: Alles auswählen

QByteArray hash = QCryptographicHash::hash(QString(QString::number(qrand())).toUtf8(),QCryptographicHash::Sha1); [\code]
liefert immer den gleichen Output...
Weiß jemand warum?

danke

Verfasst: 7. April 2011 11:48
von franzf
Wie und wo initialisierst du den Generator mit qsrand()?

Verfasst: 7. April 2011 13:07
von redbulls
qsrand(1) ruf ich im constructor des objektes auf. Also nur einmal, aber auch wenn ich es vor jeder Generierung aufrufe, kommt der selbe output.

Verfasst: 7. April 2011 13:22
von franzf
Du hattest noch nie mit diesen "Zufallszahlen" zutun?
qsrand() initialisiert den Generator. Gleicher seed -> gleiche Zahlenreihe.
qsrand() ist nicht an Objekte gebunden, sondern verwaltet einen globalen state. Einmal qsrand() aufgerufen, und schon greifen ALLE qrand auf den neuen seed() zu.
Kleines Beispiel?

Code: Alles auswählen

#include <QtGlobal>
#include <QDebug>

struct Generator {
    Generator() {
        qsrand(1);
    }
    
    int get() const {
        return qrand();
    }
};

int main() {
    qDebug() << qrand();
    qDebug() << qrand();
    qsrand(1);
    qDebug() << qrand();
    qDebug() << qrand();
    Generator g;
    qDebug() << qrand();
    qDebug() << "g" << g.get();
    qDebug() << "g" << g.get();
    Generator g2;
    qDebug() << "g" << g.get();
    qDebug() << "g2" << g2.get();
    qrand();
}
Hättest du den Output erwartet?

Willst du mehr? ->
http://www.boost.org/doc/libs/1_46_1/do ... andom.html

Verfasst: 7. April 2011 16:03
von redbulls
danke für die hilfe!
funktioniert jetzt!