1

Тема: Як перевірити введені дані користувача з даними з файлу

Простіше кажучи, перше як перевірити рядки всього файлу?

void GetIntoTheSystem(string userlogin, string userpassword) {
    ifstream isUserloginTrue("program.txt", ios_base::in);

    string  line; int verify;
    string    loginAdministrator = "Admin",
        passwordAdministrator = "Admin";

    EnterFild(userlogin, userpassword);

    if (isUserloginTrue.is_open()) {
        while (!isUserloginTrue.eof()) {
            getline(isUserloginTrue, line);

            if (line == userlogin + " " + userpassword) {
                cout << "WELCOME, " << userlogin << endl;
                break;
            }
            else if (userlogin == loginAdministrator && userpassword == passwordAdministrator) {
                cout << "You have been enter as administrator!" << endl;
                cout << " - DISPLAY USERS: " << endl;
                AdminMenu();
                break;
            }
            else {
                for (int verify = 0; verify < 3; verify++) {
                    cout << "\nUncorrect login or password.\n\tAttempts to enter left " << 3 - verify << endl;
                    EnterFild(userlogin, userpassword);

                    if (line == userlogin + " " + userpassword) {
                        cout << "WELCOME, " << userlogin << endl;
                    }
                    else if (userlogin == loginAdministrator && userpassword == passwordAdministrator) {
                        cout << "You have been enter as administrator!" << endl;
                        cout << " - DISPLAY USERS: " << endl;
                        AdminMenu();
                        break;
                    }
                    else {
                        if (verify == 2) {
                            cout << "\n\nAccess denied!The number of attempts is limited!\n\n\n" << endl;
                            exit(EXIT_SUCCESS);
                        }
                    }
                }
            }
        }
    }
    else {
        cerr << "Error, couldn't be opened the file." << endl;
        exit(EXIT_FAILURE);
    }
}

З цією функцією великі проблеми. Читає тільки перший рядок файлу і все. Якщо заходити під адміністратором, якщо не з першого разу зайти заціклюівает 2-3 рази вміст файлу

2

Re: Як перевірити введені дані користувача з даними з файлу

Я взагалі погано розумію логіку того, що ви намагаєтеся зробити. Пропустимо те, що ви, здається, не чистите введені дані від можливих пробілів, символів нового рядку і т.д. і будемо вважати, що вводиться завжди саме те, чого ви очікуєте. Отже, ви маєте файл з логінами і паролями. Ви вводите логін і пароль (EnterFild) і в циклі по цьому файлу перевіряєте, чи не збігаються вони з рядком у файлі. Якщо збігаються, виходите з цикла; якщо збігаються з логіном адміна (чомусь в циклі по файлу, для кожного рядка), виходите з цикла; якщо не збігаються (ще раз - в циклі, після кожного порівняння!) - влаштовуєте вкладений цикл на 3 спроби.
Ще раз, окремо: для кожного запису в файлі ваш код може розпочати внутрішній цикл на 3 спроби. Ви точно хочете такої поведінки?

Подякували: LoganRoss, laketych, leofun013

3

Re: Як перевірити введені дані користувача з даними з файлу

оцей кусок треба вивести з циклу while

Прихований текст
else {
                for (int verify = 0; verify < 3; verify++) {
                    cout << "\nUncorrect login or password.\n\tAttempts to enter left " << 3 - verify << endl;
                    EnterFild(userlogin, userpassword);
 
                    if (line == userlogin + " " + userpassword) {
                        cout << "WELCOME, " << userlogin << endl;
                    }
                    else if (userlogin == loginAdministrator && userpassword == passwordAdministrator) {
                        cout << "You have been enter as administrator!" << endl;
                        cout << " - DISPLAY USERS: " << endl;
                        AdminMenu();
                        break;
                    }
                    else {
                        if (verify == 2) {
                            cout << "\n\nAccess denied!The number of attempts is limited!\n\n\n" << endl;
                            exit(EXIT_SUCCESS);
                        }
                    }
                }

Тому що коли з першого разу співппадіння по перших двох умовах не буде, відбувається знову введення паролю і логіну. Взагалі, той кусок зітріть.
Повторне введення ви можете зробити тільки після того як прочитаєте весь файл. Так що робіть цю перевірку поза while.

Подякували: leofun011

4

Re: Як перевірити введені дані користувача з даними з файлу

Дякую, розібрався!)

Подякували: Fox1