Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как в Qt работает qsrand и qrand
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
eldar85
не могу понять как написать так чтобы выходила кстрока типа dfkjgi49vjodj55 - ну что то вроде этого))
что нужно вставить в функцию
qsrand(...); ???
в асистенте эта функция нифига не описана... может кто использовал и знает?
хотелось бы чтобы узнать как установить длину рандомного выражения и чтобы можно было и числа и буквы чтобы выдавал))

вот тут вроде числа получаются, но как сделать чтобы и буквы были и длинну можно было регулировать
 qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));


вот нашел как число получить например от 1 до 100
qrand()%100;

но опять же мне нужно чтобы одной длинны был код, к примеру 123456789 из 9 чмсел ну и буквы нужны...

хорошо бы и чисто буквенный рандом найти...

вот придумал как сделать рандом из пяти букв, блин но опять же проблема))) он еще с буквами и символы туда впихивает
QString d;
QString d2;
for(int j=0; j<5; j++)
{
d = qrand()%65^90;
d2.append(ddd);
d="";
}


в итоге такая шняга:
"qXIzd"
"}_T|O"
"JJ{kL"

вроде кодировку ascii поставил от 65 до 90, по идее должны же только большие латинские буквы выдаваться, а тут один хрен такая жопа...

проблема косяков была в том что хоть и пишешь
qrand()%65^90;

а он один хрен то 115 выдаст, то еще что нить))) в общем выходит за границы между 65 и 90...

пришлось сделать проверку на соответствие
int i;
for(int j=0; j<5; j++)
{
i = qrand()%65^90;
if(i<65 || i>90)
{
    j--;
}
else
{
   d.append(i);
}
i=0;
}

в итоге пять нормальных чисел выдает))
"TFPHV"
"MRWJP"
"BSQNE"
"SEWMP"
"PAWYB"
"AWKFJ"

вот так вполне уникальная хреновина получается))
int randInt1;
int randInt2;
QString d;
for(int i=0; i<5; i++)
{
randInt2 = qrand()%48^57;
randInt1 = qrand()%65^90;
if(randInt2>=48 && randInt2<=57)
{



if(randInt1<=65 || randInt1>=90)
{
    i--;
}
else
{
   d.append(randInt1);
   d.append(randInt2);
}
}
else
{
    i--;
}
randInt1=0;
randInt2=0;
}
qDebug() << d;


"O3I1V7M9F8"
"V1K8R5S4R7"
"N5H3B4M8I1"
"E8F1G8W7E0"
"O8F5C2E7R4"
"T8I1W5M3H2"
"G1I8J0B7W2"
"E4S7F1N3C3"
"H1O3G0O3C8"
"B3I7J6G9M2"
"L9K4W9M2R5"

но тут такая махина получилась, может все же есть универсальная рандомная функция с которой не придется так мозг греть, а просто задать в нее параметры типа [a-zA-Z0-9] к примеру и указть сколько символов чтобы выдала...
ufna
Вы неправильно используете операцию "^".

К примеру:
randInt2 = qrand()%48^57;

что будет, если qrand() даст вам 5?


Вам нужно что-то вида

randInt2 = qrand()%25 + 65;
eldar85
не правельно? если не сложно подскажите что дает тогда операция "^" и "+"??)

randInt2 = qrand()%25 + 65;

спасибо, понял как работает, это получается будет вызываться любой из 25 символово после 65 в таблище ascii)))
большое спасибо))
ufna
ну "^" - битовый xor. Причем здесь вообще эта операция? Она не гарантирует, что результат будет обязательно меньше "b" :)

;)
eldar85
почему то такой код
randInt2 = qrand()%25 + 65;

при каждом новом запуске программы выдает одинаковое число... если прога работает в цикле то выдаст разных вариантов, но при новом запуске программы все эти варианты тут же начинают повторяться в том же диапазоне...
получается вызвал я в цикле три раза, вышло три разных числа, закрыл прогу, запустил снова и снова теже три числа один в один...
не подскажите как бороться с этим???
BRE
Цитата(eldar85 @ 9.4.2010, 21:32) *
почему то такой код
randInt2 = qrand()%25 + 65;

при каждом новом запуске программы выдает одинаковое число... если прога работает в цикле то выдаст разных вариантов, но при новом запуске программы все эти варианты тут же начинают повторяться в том же диапазоне...
получается вызвал я в цикле три раза, вышло три разных числа, закрыл прогу, запустил снова и снова теже три числа один в один...
не подскажите как бороться с этим???

Посмотри на void qsrand ( uint seed )
eldar85
да спасибо, подставил уже
qsrand(QTime(0,0,0).msecsTo(QTime::currentTime()));

и отлично все работает)))
Гость
int randInt;
QString myString;
for(int i=0; i<5; i++)
{
randInt = qrand()%('Z'-'A'+1)+'A';
myString.append(randInt);
}
qDebug() << myString;
Гость_Андрей_*
Вот так описано использование в документации
http://www.developer.nokia.com/Community/W..._integers_in_Qt

#include <QGlobal.h>
#include <QTime>

int QMyClass::randInt(int low, int high)
    {
    // Random number between low and high
    return qrand() % ((high + 1) - low) + low;
    }
// Create seed for the random
// That is needed only once on application startup
QTime time = QTime::currentTime();
qsrand((uint)time.msec());

// Get random value between 0-100
int randomValue = randInt(0,100);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.