crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> как в Qt работает qsrand и qrand
eldar85
  опции профиля:
сообщение 9.4.2010, 0:42
Сообщение #1


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


не могу понять как написать так чтобы выходила кстрока типа 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] к примеру и указть сколько символов чтобы выдала...

Сообщение отредактировал eldar85 - 9.4.2010, 0:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Гость_Гость_Андрей_*_*
сообщение 28.3.2013, 12:14
Сообщение #2





Гости








    


Вот так описано использование в документации
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);


Сообщение отредактировал ViGOur - 29.3.2013, 10:03
Причина редактирования: Отредактировал не нужную и огромную цитату
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 10:23