Создание текстового файла с определенной строкой и использование его для сравнения в будущем

Я хочу создать текстовый файл для первого запуска с паролем и использовать код, чтобы проверить всю строку для пароля, введенного ранее. Текущий код возвращает истинное значение для первых нескольких алфавитов, даже если весь пароль не введен.

    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";
}
Другие вопросы по тегам