0

我想为第一次运行创建一个带有密码的文本文件,并使用该代码检查整个字符串以查找先前输入的密码。即使没有输入整个密码,当前代码也会返回前几个字母的真值。

    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;
            }
        }
      }
      }
      }

这是我要从中检查字符串的密码文件: 在此处输入图像描述

4

2 回答 2

0

您的问题是因为该find功能是如何工作的。它查找包含search.

您必须从文件中提取完整的密码,然后使用相等性进行比较,而不是仅仅搜索子字符串。

于 2017-03-18T06:48:40.813 回答
0

当您使用string.find(param1, param2)它时,它只会告诉您在这种情况下“匿名”的字符串是否包含您作为第一个参数放入 find() 函数中的文本。

如果您想避免这种情况,则根本不应该使用*find()*。相反,您应该进行比较。

首先,您从 txt 文件中读取字符串并将其存储在string line. 然后你要求用户在输入密码后输入密码,你检查你的字符串行是否 eqaul to password 。

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";
}
于 2017-03-18T10:51:26.750 回答