c++ - 运行代码时无法输入值

标签 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";
            }
        }
    }
}

“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/

相关文章:

c++ - 如何为我的类(class)提供交换功能?

c++ - MFC 编辑控件消息句柄访问文档对象

c# - 自动列出所有方法参数以将它们向前传递

c++ - C++局部静态变量初始化在VS2015中是线程安全的吗

visual-studio - 无法将构建平台从 Any CPU 更改为 x86

c++ - 在 Visual C++ 中进行困难测量后对光学 3D 传感器进行编程

c++ - 将 32 位 dll 注入(inject) 64 位进程 - Autoit 使之成为可能?

c++ - 使用引用生成 IBM Rhapsody 访问器

C++ 指针 - C - 样式字符串

C++ Win32 : Calling WM_PAINT from another thread using SendMessage, 绘图无效