Hallo.
In meinem Code verwende ich eine QStringList wo ich mit
Der Integer Count hat dann den Wert 4, dies ist auch korrekt.
Nun habe ich eine kleine Funktion die mir einen Random Integer in einem bestimmten Bereich zurückgibt:
Nun wenn ich jetzt versuche diese Funktion zu benutzen, und als Parameter
Der Integer
"Der ganze Code"
Grüße
Jan
In meinem Code verwende ich eine QStringList wo ich mit
count()
size()
auslesen kann, wieviele Elemente sich dortdrin befinden. Das klappt auch soweit so gut:Der Integer Count hat dann den Wert 4, dies ist auch korrekt.
Nun habe ich eine kleine Funktion die mir einen Random Integer in einem bestimmten Bereich zurückgibt:
Nun wenn ich jetzt versuche diese Funktion zu benutzen, und als Parameter
count
benutze welcher den Wert 4 beträgt bekomme ich ein komplett verfälschtes Ergebnis:Der Integer
rndm
beträgt den Wert 7143372 und nicht einen Wert zwischen 0 - 3. Wo ist hier der Denkfehler? Oder bin ich einfach blind? Folgendes proof-of-concept (im Anhang) funktioniert einwandfrei und benutzt die selbe Funktion. Ich hoffe mir kann damit jemand weiterhelfen. Danke schonmal im Vorraus C-Quellcode
- #include "simpleini/SimpleIni.h"
- #include <QApplication>
- #include <QMainWindow>
- #include <QStringList>
- #include <QFile>
- #include <stdlib.h>
- #include <time.h>
- struct playlist_header {
- QString ph_name;
- QString ph_genre;
- QString ph_description;
- QString ph_sorting;
- };
- static playlist_header load_playlist_head(const char *playlist_file);
- static QStringList load_playlist_elements(const QString &playlist_file);
- static int select_random(int max); // shuffle_algo
- static int was_played(int list[], int rnd); // playlist_shuffle
- int
- main(int argc, char *argv[]) {
- QApplication app(argc, argv);
- QMainWindow window;
- #if 0
- CSimpleIniA window_opts;
- window_opts.SetUnicode();
- window_opts.LoadFile("G:\\sample.ini");
- const char *hVal = window_opts.GetValue("window", "title");
- QString wndwTitle = hVal;
- window.setWindowTitle(wndwTitle);
- window.show();
- window_opts.SetValue("window", "title", "Changed.");
- window_opts.SaveFile("G:\\sample.ini");
- #endif
- playlist_header _ph = load_playlist_head("G:\\sample2.ini");
- QStringList elements = load_playlist_elements("G:\\sample2.ini");
- int count = elements.size();
- int rndm = select_random(count);
- #if 0
- // try on your own warranty!
- playlist_header _ph = load_playlist_head("G:\\hardcore_sample.ini");
- QStringList elements = load_playlist_elements("G:\\hardcore_sample.ini");
- #endif
- window.setWindowTitle(_ph.ph_name + " " + _ph.ph_genre + " " + _ph.ph_sorting + " -- " + _ph.ph_description);
- window.show();
- return app.exec();
- }
- playlist_header
- load_playlist_head(const char *playlist_file) {
- playlist_header ph;
- CSimpleIniA _playlist_file;
- _playlist_file.SetUnicode();
- _playlist_file.LoadFile(playlist_file);
- ph.ph_name = _playlist_file.GetValue("playlist.head", "name");
- ph.ph_genre = _playlist_file.GetValue("playlist.head", "genre");
- ph.ph_description = _playlist_file.GetValue("playlist.head", "descr");
- ph.ph_sorting = _playlist_file.GetValue("playlist.head", "sort");
- return ph;
- }
- QStringList
- load_playlist_elements(const QString &playlist_file) {
- QStringList _elements;
- QFile q_playlist_file(playlist_file);
- if (q_playlist_file.open( QIODevice::ReadOnly )) {
- while (!q_playlist_file.atEnd()) {
- QString line = q_playlist_file.readLine();
- if (line.startsWith("playable")) {
- _elements.append(line);
- }
- }
- }
- QStringList elements;
- Q_FOREACH(QString _element, _elements) {
- QString _key("playable = ");
- int key_pos = _element.indexOf(_key);
- if (key_pos >= 0)
- elements.append(_element.mid(key_pos + _key.length()));
- }
- _elements.clear();
- return elements;
- }
- int
- select_random(int max) {
- srand(time(NULL));
- return rand() % max;
- }
- int
- was_played(int list[], int rnd) {
- }
Grüße
Jan
Software being "Done" is like lawn being "Mowed". (Jim Benson)