如何在C ++中正确匹配文件中的密码和用户的输入?

时间:2018-04-28 10:00:15

标签: c++ passwords

我应该从文本文件中读取密码并将其与用户的输入进行比较。如果输入与文本文件中的密码匹配,程序应该打印消息"登录成功!"。

但是,即使键入的密码与文件中的密码匹配,我的程序也会打印出#34;登录失败"。我现在已经尝试了几次,觉得我打开文件的方式有问题。我的错误在哪里?

#include <iostream>
#include <string>
#include <fstream>


int main() {
std::string password;
std::string mypassword;
std::ifstream input;

input.open("text.txt");
input >>mypassword;

std::cout<<"Please enter your password: "<< std::endl;
std::cin>>password;

if (password == mypassword){
    std::cout<<"Login successful!"<<std::endl;
} 

else {
    std::cout<<"Login failed!"<<std::endl;
}

input.close();
return 0;
}

2 个答案:

答案 0 :(得分:0)

您需要确保您保存密码的文件当前存在于当前工作目录中。另外检查它是否成功打开。

input.open("text.txt");
if(input.is_open())
{
    input >>mypassword;

    cout<<"Please enter your password: "<< endl;
    cin>>password;

    if (password == mypassword)
        cout<<"Login successful!"<<endl;

    else
        cout<<"Login failed!"<<endl;
}
else
    cout <<"File not found!";
input.close();

答案 1 :(得分:0)

检查输入是否没有失败。此外,input.close();在程序结束时是多余的。无论如何,该文件将自行关闭。声明变量尽可能接近初始化点。格式化代码。

#include <iostream>
#include <string>
#include <fstream>

int main() {
    std::ifstream input("text.txt");
    std::string mypassword;
    if(!(input >>mypassword) || mypassword.size() == 0 ){
        std::cout << "Could not read password from input file\n";
        return -1;
    }

    input.close();

    std::cout<<"Please enter your password: "<< std::endl;
    std::string password;
    std::cin>>password;

    if (password == mypassword){
        std::cout<<"Login successful!"<<std::endl;
    } 

    else {
        std::cout<<"Login failed!"<<std::endl;
    }

    return 0;
}