Пытаясь создать новый пароль каждый раз, когда пользователь почти находит пароль - PullRequest
0 голосов
/ 14 мая 2019

Прежде всего, английский не мой родной язык, поэтому, пожалуйста, скажите мне, если вы что-то не поняли.

Назначение: есть 9-значный пароль, целое число, например: 385987231.Theпользователь введет 9-значный ввод. Каждый пользователь приближается к угадыванию / поиску пароля, пароль будет изменен. Если 8 цифр пароля и введенные пользователем совпадения, пароль будет изменен. Порядок цифр не важен.Имеет значение только то, что, если совпадают восемь цифр, пароль меняется.

Например: пароль 123456789, пользователи вводят 223456789, в этом случае пароль меняется сам.

Существует скрытый пароль, который создается в начале, и пароль, с которого он вводитсяuser.

Я сделал так, что passwordChecker и passwordCreater functions.passwordChecker проверяют 2 числа в массиве, если они совпадают или нет, и каждый раз, когда они совпадают, счетчик идет вверх 1. Если счетчик равен 8, то скрытый пароль изменяется.если нет, то он не изменяется.

Функция passwordCreater создает случайный пароль. Поскольку он находится в переменной char, я добавляю 48, чтобы сделать его целым числом, обратитесь к таблице ASCII, и проблема начинается.

Дажехотя функция создает пароль, она не возвращает пароль и пароль неверный.И я не думаю, что passwordChecker работает, потому что это пустая функция, так что она ничего не возвращает. Когда я вызываю passwordCreater в passwordChecker, ничего не приходит и ничего не происходит. Вредно.

#include <cstdlib> 
#include <ctime> 
#include <iostream>
#include <time.h> 
#include <stdlib.h>
using namespace std;


char passwordCreater()
{
    srand((unsigned)time(0)); 
    char random_integer[20]; 
    for (int index=0; index<9; index++)
    {
        random_integer[index] = (rand()%10)+1; 
        random_integer[index]=random_integer[index]+48;
        cout << random_integer << endl; 
    } 
    return random_integer[9];
}



void passwordChecker (char a[9], char b[9])
{
    int counter;
    for (int i=0;i++;i<10)
    {
        if (a[i]==b[i])
        {
            counter=counter+1;
        } 
        else
        {
            counter=counter;
        }
    }
    printf("%d \n",counter);
    if (counter==8)
    {
        b[9]==passwordCreater();
    } 
    else if (counter==9)
    {
        printf("Password is right!");
    } 
    else
    {
        printf("Password is wrong!");
        return;
    }
}


int main()
{
    char hiddenPassword[9];
    hiddenPassword[9]==passwordCreater();
    char password[9];
    printf("%s \n",hiddenPassword);
    printf("------------------------");
    printf("\n       PASSWORD:       ");
    printf("\n------------------------\n");
    scanf("%s", &password);
    printf("%s \n",password);
    passwordChecker(password,hiddenPassword);
    return 0;
}

1 Ответ

0 голосов
/ 14 мая 2019

Вот решение: генерирует случайное начальное число отдельно и только один раз .

Генерирует случайный пароль довольно просто, затем проверяет ввод пользователя, анализируя его в 2 части .

# 1: Проверяет, имеют ли они одинаковую длину перед

# 2: сравнивает каждую отдельную цифру во входном пароле и дает обратную связь соответственно. Если Counter читает 8, он создает новый пароль. Наслаждайтесь.

РЕДАКТИРОВАТЬ: Я использовал <random> заголовок вместо srand(time(0)) и rand(), чтобы избавиться от смещения.

#include <iostream>
#include <ctime>
#include <random>
#include <string>
#include <vector>
using namespace std;

mt19937 Generator;
uniform_int_distribution<int> Distribution(0,9);

void GenerateRandomSeed() {
    Generator.seed(time(0));
}

vector<char> CreatePassword() {
    cout << "Hidden password: ";
    vector<char> Password;
    for(int i = 0; i < 9; ++i) {
        Password.push_back(Distribution(Generator) + 48);
        cout << Password[i];
    }
    cout << endl;
    return Password;
}

bool isPasswordCorrect(string & InputPassword, vector<char> & HiddenPassword) {
    if(InputPassword.length() != HiddenPassword.size()) {
        cout << "Password is wrong!" << endl;
        return false;
    }
    int Counter = 0;
    for(int i = 0; i < InputPassword.length(); ++i) {
        if(InputPassword[i] == HiddenPassword[i])
            ++Counter;
    }
    if(Counter == 8) {
        HiddenPassword = CreatePassword();
        cout << "Password was close, new hidden password has been generated" << endl;
        return false;
    } else if (Counter == 9){
        cout << "Password is right!" << endl;
        return true;
    }
    cout << "Password is wrong!" << endl;
    return false;
}

int main() {
    GenerateRandomSeed();
    string InputPassword;
    vector<char> HiddenPassword;
    HiddenPassword = CreatePassword();
    do {
        cout << "Input correct password please: ";
        cin >> InputPassword;
    } while (!isPasswordCorrect(InputPassword, HiddenPassword));
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...