Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2010, 18:56   #1
Shuster
Пользователь
 
Регистрация: 16.01.2009
Сообщений: 12
По умолчанию генератор паролей

Ребят, помогите!
Не могу понять, что за колдовство!
Генерирую пароли вот таким кодом:
Код:
{
char sym[]="0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";

	srand(time(0));

	char *password=new char[9]; 
	password[0]=(char)(65+rand()%25);

	for(int i=1;i<8;i++)
		password[i]=sym[rand()%61];
	password[8]='\0';

return(password);
}
Вызываю функцию несколько раз, результаты записываю в файл. И вот, что меня убивает: если в теле функции ставлю ShowMessage, все работает чудесно, если не ставлю пароль получается один и тот же Не понимаю, как это связано

Последний раз редактировалось Stilet; 28.11.2010 в 20:24.
Shuster вне форума Ответить с цитированием
Старый 28.11.2010, 22:19   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Вся соль в этой строке:
Код:
srand(time(0));
Нужно не нулевое время брать, а текущее или еще какое непостоянное число.
А так получается, что инициализируете последовательность своих псевдослучайных чисел одним и тем же числом, вот и последовательность одна и та же получается.
pu4koff вне форума Ответить с цитированием
Старый 28.11.2010, 22:30   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Это srand(time(0)); лучше сделать в начале программы 1 раз.
Arigato вне форума Ответить с цитированием
Старый 29.11.2010, 07:22   #4
Shuster
Пользователь
 
Регистрация: 16.01.2009
Сообщений: 12
По умолчанию

Спасибо огромное!
Правда, так и остались загадкой, магические свойсва ShowMessage.
Зато теперь все работает
Shuster вне форума Ответить с цитированием
Старый 29.11.2010, 09:47   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Правда, так и остались загадкой, магические свойсва ShowMessage.
В порядке гипотезы могу предположить, что ввиду того, что винда не является системой реального времени при попытке получить системное время несколько раз подряд каждый раз получается одно и то же значение (вообще, как я заметил, разрешающая способность обычно около 15-16 миллисекунд). А ShowMessage в связи с необходимостью нажать на кнопку перед продолжением задерживала выполнение кода на время, достаточное, чтобы наблюдаемое системное время обновилось. Попробуйте, например, заменить его Sleep(50); - должно дать такой же эффект.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 29.11.2010, 11:30   #6
Shuster
Пользователь
 
Регистрация: 16.01.2009
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Попробуйте, например, заменить его Sleep(50); - должно дать такой же эффект.
Не дает, даже если время задержки увеличить
Shuster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор паролей Eclipse09 Общие вопросы C/C++ 2 09.11.2009 13:59
Генератор паролей -=L.Morgan=- Помощь студентам 1 29.06.2009 03:04