Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 11.08.2016
Сообщений: 6
1

Подбор введённого пароля

11.08.2016, 22:26. Показов 2529. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу понять почему не работает. Компилятор не выдаёт ошибок, но ничего не работает. Точнее работает только случай ввода 0000;. Проблема где-то в циклах, возможно в трансформации char->int.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int main(int argc, char* argv[])
{
  char pas[5], log1[5]="0000";
  cin>>pas;
  cout << "WAITING"<<endl;
  atoi(pas);
  atoi(log1);
  if(strcmp(pas,log1)==0){cout << "PASSWORD: " << log1;}
  else
   for(int z=0;z<10;z++)
  {
     log1[0]=z;
 
  for(int y=0;y<10;y++)
  {
    log1[1]=y;
  for(int x=0;x<10;x++)
  {
     log1[2]=x;
  for(int i=0;i<10;i++)
        {
           log1[3]=i;
 
           if(strcmp(pas,log1)==0){cout << "PASSWORD: " << log1;}
 
        }
   }
   }
   }
        system("pause");
        return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2016, 22:26
Ответы с готовыми решениями:

Проверка введённого пароля
Срочно нужен код вот к этой задачке: Написать программу на языке C++ c применением оператора for...

После трех раз неправильно введённого пароля выводить на экран "Превышено допустимое число ввода"
Нужно чтобы программа после трех раз неправильно введённого пароля выводила на экран &quot;Превышено...

Подбор пароля для rar архива
Стоит задача подобрать пароль к rar архиву.Я новичок в этом вопросе (скорее дуб дубом) и времени у...

Оценка безопасности пароля путем перебора пароля из словаря
Разработать программное обеспечение для оценки степени безопасности паролей пользователей. Я уже...

5
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
11.08.2016, 22:40 2
Лучший ответ Сообщение было отмечено socweb как решение

Решение

Циклы должны быть на символах:
C++
1
for (char z = '0'; z <= '9'; ++z)
1
9 / 9 / 9
Регистрация: 04.08.2016
Сообщений: 24
11.08.2016, 22:48 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int main(int argc, char* argv[])
{
  char pas[5], log1[5]="0000"; // Создаете неинициализированный массив pas[5], и инициализированный log1[5]
  cin>>pas; // Возможность вылететь за пределы массива
  cout << "WAITING"<<endl;
  atoi(pas); //эта функция не меняет входных данных, она возвращает int, следовательно здесь происходит не то, чего вы возможно хотели
  atoi(log1);
  if(strcmp(pas,log1)==0){cout << "PASSWORD: " << log1;} // В pas лежит совсем не то, чего вы ожидали, а может вы не того ожидали в log1
  else
   for(int z=0;z<10;z++)
  {
     log1[0]=z; //неявное приведение типа int в char. Получится совсем не то, чего вы ожидаете.
 
  for(int y=0;y<10;y++)
  {
    log1[1]=y;
  for(int x=0;x<10;x++)
  {
     log1[2]=x;
  for(int i=0;i<10;i++)
        {
           log1[3]=i;
 
           if(strcmp(pas,log1)==0){cout << "PASSWORD: " << log1;} 
 
        }
   }
   }
   }
        system("pause");
        return 0;
У вас идет серьезная путанница в том, что такое символ и что такое число.
Работает оно со случаем 0000, потому что первый strcmp отрабатывает правильно (просто потому что вам повезло с ошибками), а дальше идет множество ошибок, которые шансов уже не дают.
0
0 / 0 / 0
Регистрация: 11.08.2016
Сообщений: 6
11.08.2016, 22:57  [ТС] 4
Заработало, однако если преобразовывать строки через atoi в int можно ли будет в цикле for оставить тип int?

Добавлено через 42 секунды
Добавлено через 2 минуты
Devenmort, однако достаточно оказалось только изменения типа переменных цикла на char;
0
9 / 9 / 9
Регистрация: 04.08.2016
Сообщений: 24
11.08.2016, 23:05 5
Лучший ответ Сообщение было отмечено socweb как решение

Решение

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

atoi преобразует всю строку в одно число, а не набор цифр.
Цикл бы сменился на for (int i = 0; i<10000; i++)

да и пришлось бы менять изначальное char pas[5] = "0000" на int pas = 0

И это решение было бы лучше, не было бы никакого strcmp, было бы обычное сравнение чисел.
1
0 / 0 / 0
Регистрация: 11.08.2016
Сообщений: 6
11.08.2016, 23:19  [ТС] 6
Получается заработало через char, но как сделать с int? Нужно привести charовские массивы к intовым? Как?

Добавлено через 12 минут
Да, с atoi наглупил сильно. Действительно ожидал совсем не того... Ну что ж, спасибо за объяснение.
0
11.08.2016, 23:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2016, 23:19
Помогаю со студенческими работами здесь

Фильтрация введённого текста
Собственно задача: Создать программу, фильтрующую текст, введенный с клавиатуры. Задача программы...

Анализ введённого числа
С клавиатуры вводится целое число N. Найти: его максимальную и минимальную цифру; индекс первой...

Анализ введённого числа
Добрый день! Еще совсем новичок в программировании... помогите, пожалуйста, найти ошибку в коде....

Сумма цифр введённого числа
Создал сабж т.к. решение написано по теме, но не по разделу. По воле администрации сохраняю все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru