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";
}
}
}
}
“Password.txt”中的文本:
Abhik Ray 1123
正在正确读取密码,我已经检查过了。
当我运行代码时,它让我输入密码,但密码匹配没有按预期显示。然后它再次询问我无法输入的密码。然后它就退出了。
我应该改变什么?
最佳答案
你有几个问题,比如一次只匹配密码文件中的一行。
该消息的原因是 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
,您只会在 Opass
中得到 Abhik
,该行的其余部分将保留在输入缓冲区中,直到接下来阅读。
这也是它不要求下一个输入的原因,它只是读取已经存在的以下单词。
要读取整行输入,您需要使用 getline(cin, Opass);
,就像从文本文件中读取一样。
关于c++ - 运行代码时无法输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43030039/