Прочитать имена пользователей и пароли из текстового файла - PullRequest
2 голосов
/ 23 апреля 2011

Мне нужно извлечь имена пользователей и пароли из TXT-файла, и я с трудом нахожусь в уме, как именно это сделать.Я постараюсь разобрать это.

  1. Открыть файл
  2. Читать в именах пользователей
  3. Сравнить имя пользователя с пользовательским вводом
  4. Сравните пароль с пользовательским вводом, связанным с именем пользователя
  5. , верните true или false, если имя пользователя и пароли совпадают

Да, это домашняя работа.И я учусь использовать fstream, ожидая, пока USPS отправит мою учебную текстовую книгу.Мы очень ценим вашу помощь!

Вот что у меня есть:

bool User::check(const string &uname, const string &pass)
{
    //open the file

    fstream line;
    line.open("users.txt");

    //Loop through usernames
        //If a username matches, check if the password matches
}

Файл users.txt выглядит так:

ali87   8422

ricq7   bjk1903

messi   buneyinnessi

mike    ini99ou

jenny   Y00L11A09

end

Ответы [ 3 ]

2 голосов
/ 23 апреля 2011

Я думаю, что следующий псевдоалгоритм может быть лучшим вариантом для вас:

  1. Введите имя пользователя, пароль
  2. Открыть поток файлов в файл
  3. Поток поиска для совпадения имени пользователя (выход, если не найден)
  4. Если найдено, сравните зашифрованный входной пароль с сохраненным зашифрованным паролем.
  5. Если найдено, верните успех, иначе «Имя пользователя не найдено или пароль неверный».

На шаге 3 каждый строковый буфер хранится в строке, которую можно сохранить в контейнере строк. В идеале, во время этой обработки вы можете разбить строку на имя пользователя и пару паролей, а затем сохранить их в std :: map; и затем получить доступ к этому через map.find (введите имя пользователя) == введите пароль.

Вам не нужно хранить карту дольше, чем время входа в систему, затем вам следует сбросить карту (возможно, как локальную переменную функции).

Если у вашей программы действительно есть цель, это идеально, в противном случае просто включите ее:).

1 голос
/ 23 февраля 2017

Я включил iostream, fstream и cstring.И использование namespace std.

int main()
{
char login_password[20];
char stored_password[20];   
char login_username[20];
char stored_username[20];

fstream pull("users.txt",ios::in);
if (!pull) { 
    cout<<"File not loaded!"<<endl;
    return -1; 
}
cout<<"Username: ";
cin>>login_username;
while(strcmp(login_username,stored_username)){ 

//if login and stored usernames are equal, function strcmp returns 0,
//at first loop they are certainly not, so it is: while(1)

    pull>>stored_username;
    if(pull.eof()){   //if it is the end of file
        cout<<"Username does not exist. "<<endl;
        return -1;  
    }
}
pull>>stored_password; 

//since username and password are in the same line, password next to
//correctly inputted username is saved in stored_password

cout<<"Password: ";   
//now user enters password to confirm username
cin>>login_password;
while(strcmp(stored_password,login_password)){
    cout<<"Wrong password. "<<endl;
    cout<<"Try again: ";
    cin>>login_password;
}
cout<<"Login successful."<<endl;
return 0;
}

users.txt выглядит следующим образом:

  • Lena84 uzumymw
  • Doris20 kjkszpj

между именем пользователя и паролем один пробел (также без маркеров)

1 голос
/ 23 апреля 2011
...