void Manager::ManagerView1()
{
system("cls");
string Ipass;
string Opass;
ifstream Password("Password.txt", ios::in);
if (!Password)
{
cerr << "Check File Integrity";
}
else
{
while (!Password.eof())
{
getline(Password,Ipass);
cout << "Enter Password :\n";
cin >> Opass;
if (Opass == Ipass)
{
cout << "Passwords Match";
}
}
}
}
&#34; Password.txt&#34;中的文字:
Abhik Ray 1123
正在正确读取密码,我已经检查过了。
当我运行代码时,它允许我输入密码,但密码匹配不会显示出来。然后再次询问密码,我无法输入密码。然后就退出了。
我应该改变什么?
答案 0 :(得分:2)
您有几个问题,例如尝试一次只匹配密码文件中的一行。
消息的原因是if (Opass == Ipass)
比较了字符数组的地址,而不是它们的内容。
如果您使用std::string
来存储字符串,则比较可行,但使用C样式字符串则需要使用if(strcmp(Opass, Ipass) == 0)
。
您可能还想检查此问题以了解如何终止循环:
Why is iostream::eof inside a loop condition considered wrong?
在使用cin >> Opass;
的新版代码中,>>
一次只会读取一个字(它会在每个空格处停止)。因此,如果您键入Abhik Ray 1123
,则只会在Abhik
中获得Opass
,并且该行的其余部分将保留在输入缓冲区中,直到下一次读取为止。
这也是为什么它不要求下一个输入,它只是读取已经存在的以下单词。
要读取整行输入,您需要使用getline(cin, Opass);
,就像从文本文件中读取一样。
答案 1 :(得分:0)
Opass和Ipass是指针,通过执行Opass == Ipass
,您可以检查它们是否指向内存中的相同区域。
您必须使用strcmp
来比较它们的值。