我运行代码时无法输入值

时间:2017-03-26 14:31:36

标签: c++ visual-studio visual-c++

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

正在正确读取密码,我已经检查过了。

当我运行代码时,它允许我输入密码,但密码匹配不会显示出来。然后再次询问密码,我无法输入密码。然后就退出了。

我应该改变什么?

2 个答案:

答案 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来比较它们的值。