Создание текстового файла с определенной строкой и использование его для сравнения в будущем
Я хочу создать текстовый файл для первого запуска с паролем и использовать код, чтобы проверить всю строку для пароля, введенного ранее. Текущий код возвращает истинное значение для первых нескольких алфавитов, даже если весь пароль не введен.
int Manager::ManagerView1()
{
Passwordsearch:
system("cls");
string search;
int offset,ErrorVar;
string line;
ifstream Myfile;
Myfile.open("Password.txt");
cout << "Enter your Password :\n";
cin >> search;
if (Myfile.is_open())
{
while (!Myfile.eof())
{
getline(Myfile,line);
if ((offset = line.find(search, 0)) != string::npos)
{
cout << "Password Accepted ..\n";
system("pause");
}
else
{
cout << "Password Incorrect. \nPress\n 1.) Go back to the main screen\n 2.) Re-Enter Password \n";
cin >> ErrorVar;
if (ErrorVar == 1)
{
system("PAUSE");
return 1;
}
else if (ErrorVar == 2)
{
system("PAUSE");
system("cls");
goto Passwordsearch;
}
else
{
cout << "Wrong option !! Please try again\n";
system("PAUSE");
return 1;
}
}
}
}
}
2 ответа
Ваша проблема в том, как find
функция работает. Он ищет подстроку, содержащуюся в search
,
Вы должны извлечь полный пароль из файла, а затем сравнить, используя равенство, а не просто искать подстроку.
Когда вы используете string.find(param1, param2)
он просто сообщает вам, содержит ли строка в этом случае "Anonymous" текст, который вы указали в качестве первого параметра в функции find().
Если вы хотите избежать этого, вы не должны использовать *find()*
совсем. Вместо этого вы должны сделать сравнение.
Сначала вы читаете строку из текстового файла и сохраняете ее в string line
, Затем вы просите пользователя ввести пароль после того, как он вводит пароль, вы проверяете, соответствует ли ваша строка строки паролю.
std::string my_pass = "Anonymous";//Get it from file.
std::string input_pass = "";
std::cin >> input_pass;
if(input_pass==my_pass){
std::cout << "PASSWORD CORRECT\n";
}