не присваиваются значения в массив

#include <iostream>

#include <random>

#include <string>

using namespace std;
using std::string;
std::random_device rd;

// Функции

string generate_password(size_t len = 7) // генерация кода доступа
{
    string res;
    while (len--)
        res += '0' + rd() % 10;
    return res;
}



string change_generate_password(string pass) // генерация нового кода доступа
{
    for (auto& ch : pass)
        ch = '0' + ((ch - '0') + 1) % 10;
    return pass;
}



int main()
{
    
    setlocale(LC_ALL, "Russian");
    
    
    



    // Переменные
    
    string login,last_login, name, password, new_password, last_password,code,last_code,new_code;
    int menu, count_, change_password;
    count_ = 0;
    change_password = 0;
    int number = 0;
    int const SIZE = 100;
    //int i = 0;
    int value = 0;

    // массивы
    
    string all_login[SIZE];
    string all_password[SIZE];
    string all_code[SIZE];
    
    /*
    string *all_login = new string[SIZE]; // логины
    string* all_password = new string[SIZE]; // пароли
    string* all_code = new string[SIZE]; // одноразовые пароли(Коды)
    */

    // Меню
    while (true)
    {
    cout <<"Выберите нужное действие:\n"
        <<"1. Регистрация\n"
        <<"2. Авторизация\n"
        <<"3. Смена пароля\n"
        <<"4. Выход\n";
    cin >> menu;
    
        switch (menu)
        {
            // Регистрация
        case 1:
            cout << "Добро пожаловать в меню регистрации!!!" << endl;
            cout << "Введите логин: ";
            cin >> login;
            last_login = login;
            password = generate_password();
            last_password = password;
            cout << "Введите ваше имя: ";
            cin >> name;
            code = generate_password(); // генерируется одноразовый код доступа
            last_code = code;
            cout << "Ваш логин: " << login
                << "\nВаш пароль: " << password
                <<"\nВаш одноразовый код доступа: "<< code << endl << endl;
            change_password++;
            
            for (int i= 0; value < 1; i++)
            {
                all_login[i] = login;
                all_password[i] = password;
                all_code[i] = code;
                value++;
            }
            
            
            
            
            break;


            // Авторизация
        case 2:
            while (true)
            {
                cout << "Введите ваш логин: ";
                cin >> login;
                cout << "Введите ваш пароль: ";
                cin >> password;
                cout << "Введите ваш код доступа: ";
                cin >> code;
                int b = 0;
                for (; b < SIZE; b++)
                {
                    if (login == all_login[b])
                    {
                        cout << b;
                        continue;
                    }
                }


                if (login == all_login[b] && password == all_password[b] && code == all_code[b])
                {
                    cout << "Здравствуйте! " << name << endl;
                    code = change_generate_password(last_code);
                    last_code = code;
                    all_code[b] = code;
                    break;
                    
                }
                else
                {
                    cout << "Логин или пароль не верный!\n"<<endl;
                    count_++;
                    
                    if (count_ > 3)
                    {
                        cout << "Смените пароль!\n";
                        count_ = 0;
                        //break;
                    }
                    
                }
                break;
            }
            break;


            // Смена пароля
        case 3:
            
            
            if (change_password > 0)
            {
                new_password = change_generate_password(password);
                if (new_password != last_password)
                {
                    password = new_password;
                    last_password = password;
                    cout << "Ваш пароль успешно сменен!\n"
                        << "Ваш логин: " << login
                        << " \nВаш пароль: " << password<<endl<<endl;
                }
                else
                {
                    cout << "новый пароль не должен быть похож на старый!!!" << endl<<endl;
                }
            }
            else
            {
                cout << "Вы еще не зарегестрированны!!!" << endl<<endl;
                menu = 1;
            }
            break;
            


        // Выход
        case 4:
            /*
            delete [] all_login;
            delete [] all_password;
            delete [] all_code;
            */
            return 0;

        default:
            cout << "Такого пункта в меню нет попробуйте еще раз";
            break;
        }
    }
}

Всем привет такая проблема. Во-общем нам нужно хранить в массивах данные пользователей как я планировал это сделать.

  1. Вводим данные логин и имя , пароль и одноразовый код генерируются сами
  2. Записываем логин пароль и код в разные динамические массивы под один индекс
  3. получаем номер индекс логина и по этому индексу сравниваем все остальные данные

Ответы (1 шт):

Автор решения: DmitryK

Ну тут достаточно ошибок.
Во первых вы вносите всего 1 значение в массивы под индексом 0 - потому что в цикле условие на выход for( int i=0; value < 1; i++)

int value = 0;
....
for (int i= 0; value < 1; i++)
{
    all_login[i] = login;
    all_password[i] = password;
    all_code[i] = code;
    value++;
}

Видимо value - это количество записей в массиве. Тогда должно быть так:

int value = 0;
....
case 1:
    all_login[value] = login;
    all_password[value] = password;
    all_code[value] = code;
    value++;

А при авторизации у вас вообще выход за пределы массива. Первый цикл завершается, когда b==SIZE. Видимо вы при совпадении логина хотели выйти из цикла, но тогда надо было использовать break;. А дальше в операторе if() вы адресуете массив по значению b, т.е. фактически вы обращаетесь к элементу all_login[SIZE] - а это уже за пределами массива. А в теле условного оператора ещё и присваиваете значение!

case 2:
    int b = 0;
    for (; b < SIZE; b++)
    {
        if (login == all_login[b])
        {
            cout << b;
            continue;  // видимо здесь подразумевался break;
        }
    }

if (login == all_login[b] && password == all_password[b] && code == all_code[b]) // выход за пределы массива
{
   all_code[b] = code;  // выход за пределы массива
   break;
}

При смене пароля вы затираете старое значение пароля. У вас и last_password и password равны одному значению. Чтобы этого не было, поменяйте строки местами.

if (new_password != last_password)
{
    password = new_password;
    last_password = password;

Также при смене пароля вы его как-бы сменили, вот только в массив паролей не записали. И какой именно пароль вы меняете? От какой учетной записи?

→ Ссылка