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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2014, 21:40   #1
laovai
 
Регистрация: 27.09.2014
Сообщений: 9
По умолчанию Генератор паролей (С)

Задача такая:
Написать программу, которая выводит на экран 10 паролей, сгенерированных
случайным образом из латинских букв и цифр, причём буквы должны быть
как в нижнем, так и в верхнем регистрах. Длина пароля - 8 символов.

Программа вроде как работает (код прилагаю), но есть косяк: помимо букв и цифр выводит символы (>;:^ и т.д.), которые по условию не требуются.

Вопрос: как исправить эту ошибку?

Код:
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>


int main ()
{
 char num []={'0','1','2','3','4','5','6','7','8','9'};
 char latin_b []={'A'-'Z'};
 char latin []={'a'-'z'};
 int i, k, passlenght;
 srand(time(NULL));
 passlenght=8;

 for (i=0; i<10; i++)
 {
   for (k=0; k<8; k++)
   {
     putchar(rand()%('z'-'a'+'Z'-'A'+'9'-'0')+'0');
    }
   printf ("\n");
 }
return 0;
}
laovai вне форума Ответить с цитированием
Старый 27.09.2014, 21:58   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А ты посчитай на калькуляторе выражение 'z'-'a'+'Z'-'A'+'9'-'0'.
Я тоже посчитаю, потом сравним результаты.

Ну и таки вот:
Код:

'z'-'a'+'Z'-'A'+'9'-'0'
'z' = 0x7A
'a' = 0x61
'Z' = 0x5A
'A' = 0x41
'9' = 0x39
'0' = 0x30

'z' - 'a' = 'Z' - 'A' = 0x19
'9' - '0' = 0x09

0x19 + 0x19 + 0x09 = 0x3B

putchar(rand()%('z'-'a'+'Z'-'A'+'9'-'0')+'0');
rand()%('z'-'a'+'Z'-'A'+'9'-'0') = rand()%0x3B = [0x00...0x3A]
putchar(rand()%('z'-'a'+'Z'-'A'+'9'-'0')+'0') = 
= [0x00...0x3A] + 0x30 = [0x30...0x6A]


Как у нас говорят - "попал пальцем в жо небо".


Короче, будь проще - возьми char-буфер, набей его символами, из которых составлять пароли, а затем в цикле:
Код:
for (....)
  putchar(buffer[rand() % strlen(buffer)]); // вот и всё
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 27.09.2014 в 22:35.
min@y™ вне форума Ответить с цитированием
Старый 27.09.2014, 22:57   #3
laovai
 
Регистрация: 27.09.2014
Сообщений: 9
По умолчанию

min@y™

"Мы пойдем другим путем!" (с)

В общем, по итогам размышлений "как переделать" получилось вот что:

Код:
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>


int main ()
{
 int i, k, choose, passlenght=8;
 srand(time(NULL));

 for (i=0; i<10; i++)
 {
   for (k=0; k<passlenght; k++)
   {
     choose=rand()%3;
     switch (choose)
     {
       case 0:
       putchar(rand()%('z'-'a')+'a');
       break;
       case 1:
       putchar(rand()%('Z'-'A')+'A');
       break;
       default:
       putchar(rand()%('9'-'0')+'0');
     }
   }
   printf ("\n");
 }
 return 0;
}
В любом случае, спасибо. Впредь буду внимательнее к таким моментам.
laovai вне форума Ответить с цитированием
Старый 27.09.2014, 23:03   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
"Мы пойдем другим путем!" (с)
Разруха не в сортирах, а в головах! (© пр-р Преображенский)

Хулио ж ты Иглесиас? Канешна лучше юзать свой быдлокод. А то припёрся, тут, понимаешь, какой-то член с горы и заменил твои 20 строк своими двумя, подлец!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 27.09.2014, 23:33   #5
laovai
 
Регистрация: 27.09.2014
Сообщений: 9
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Разруха не в сортирах, а в головах! (© пр-р Преображенский)

Хулио ж ты Иглесиас? Канешна лучше юзать свой быдлокод. А то припёрся, тут, понимаешь, какой-то член с горы и заменил твои 20 строк своими двумя, подлец!
Да не кипятись ты так, твой код мне очень даже пригодится.
laovai вне форума Ответить с цитированием
Старый 27.09.2014, 23:35   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Да не кипятись ты так
Я тебя запомнил.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
генератор паролей Shuster Общие вопросы C/C++ 5 29.11.2010 11:30
Генератор паролей artyomz JavaScript, Ajax 0 15.10.2009 19:01