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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2018, 00:16   #1
mouserman
 
Регистрация: 05.09.2017
Сообщений: 4
По умолчанию Изменение значения переменной при считывании ее из файла

Имеется часть кода:

Код:
struct Accounts {
        string login;
        string password;
        int role;
    };
    int main() {
//От роли будет зависеть админ ты, или пользователь
        int role;
//Стартовое меню
        startingMenu(role);
//В зависимости от роли выбираем либо функционал админа, либо пользователя. 2 - роль пользователя, который зарегистрировался как админ, но еще не подтвержден
        switch (role) {
        case 1: adminMode();
            break;
        case 0: userMode();
            break;
        case 2:
            cout << "Wait, when you would be accepted by admin!" << endl;
            break;
        }
        system("pause");
        return 0;
    }
    void loginUser(int &role) {
        cout << endl;
        cout << "Enter your login" << endl;
        string input_login;
        cin >> input_login;
        cout << endl;
        cout << "Enter your password" << endl;
        string input_password;
        cin >> input_password;
        Accounts accounts;
//Флаг, который будет фиксировать, найден ли пользователь с таким логином и паролем или нет
        bool flag = false;
//Открываем файл, в котором содержатся логины, пароли и роли каждого пользователя
        ifstream list("list.txt");
        if (list.is_open()) {
//Ищем пользователя с введенным логином и паролем
            while (list >> accounts.login >> accounts.password >> role) {
                if (input_password == accounts.password && input_login == accounts.login) {
                    flag = true;
                    break;
                }
            }
            list.close();
        }
        else {
            writeThatFileCannotBeOpened();
        }
        cout << endl;
        if (flag) {
            cout << "Enter successed!" << endl;
        }
        else {
            cout << "Enter failed! Please, try again." << endl;
            loginUser(role);
        }
    }
    void adminMode() {
//По умолчанию, роль админа = 1
        int role = 1;
        while (true) {
//В меню админа представлен список действий, доступных админу. При нажатии цифры 3, выходим в стартовое меню выхода или регистрации
            switch (adminMenu()) {
            case 3:
                startingMenu(role);
                break;
            }
        }
    }
    void userMode() {
//По умолчанию, роль пользователя= 0
        int role = 0;
        while (true) {
//В меню пользователя представлен список действий, доступных пользователю. При нажатии цифры 4, выходим в стартовое меню выхода или регистрации
            switch (userMenu())
            {
            case 4:
                startingMenu(role);
                break;
            }
        }
    }
void startingMenu(int &role) {
    cout << "1 - registration" << endl;
    cout << "2 - login" << endl;
//Переменная, в которой будет значение, которое выбрано: регистрация или вход
    int choise = 0;
//Флаг для проверки того, что пользователь выбрал либо регистрацию, либо вход
    bool flag = false;
    while (true) {
//Выбор, регистрация или вход
        cin >> choise;
        switch (choise)
        {
        case 1: 
            registrateUser(role);
            flag = true;
            break;
        case 2: loginUser(role);
            flag = true;
            break;
        default:
            cout << "Choose 1 or 2!" << endl;
            break;
        }
        if (flag) {
            break;
        }
    }
}
Задача - реализация функционала администратора и пользователя. Однако столкнулся со следующей проблемой: если зайти как администратор, выйти, а потом зайти как пользователь, то все равно зайдет в режим администратора, хотя у этого аккаунта role = 0, а значит должен зайти как пользователь. В чем ошибка?

Последний раз редактировалось mouserman; 05.05.2018 в 21:34. Причина: Добавлены комментарии
mouserman вне форума Ответить с цитированием
Старый 05.05.2018, 01:38   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Какой прекрасный код: сразу понятно, как он работает, благодаря подробным комментариям в каждой строке!

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


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Предача файла. Разделяемая память. Заполнение при считывании dimoni414 Общие вопросы C/C++ 2 18.05.2016 18:48
Вывод мусора при считывании файла fewcher Помощь студентам 0 15.10.2013 18:51
Ошибка при считывании из файла JustSay Общие вопросы Delphi 3 29.07.2013 13:28
Дублирует структуру при считывании из файла RaTeN Общие вопросы C/C++ 2 05.10.2011 00:28
Проблема при считывании из файла JeyKip Общие вопросы C/C++ 0 17.01.2010 22:03