如何在 C++ 中使用 cin 隐藏用户输入?

Pre*_*ity 0 c++ linux user-input

可能的重复:
从 std::cin 读取密码

我正在尝试制作一个简单的密码程序,以便熟悉 C++,但我遇到了一些问题。在此代码中,我要求用户输入他们选择的密码,然后他们输入它。我想要编码做的是隐藏输入(不是用 *s 替换它),但仍然显示光标,以及输入密码之前和之后的文本,如下所示:

Please enter password: [don't show input]
Please re-enter password: [don't show input]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我使用的是 Linux,所以我无法使用任何 Windows 库(windows.h 等)。

Nik*_*lis 6

您不能直接使用 cin 来执行此操作。你必须“走低”。尝试调用这些函数:

#include <termios.h>

...

void HideStdinKeystrokes()
{
    termios tty;

    tcgetattr(STDIN_FILENO, &tty);

    /* we want to disable echo */
    tty.c_lflag &= ~ECHO;

    tcsetattr(STDIN_FILENO, TCSANOW, &tty);
}

void ShowStdinKeystrokes()
{
   termios tty;

    tcgetattr(STDIN_FILENO, &tty);

    /* we want to reenable echo */
    tty.c_lflag |= ECHO;

    tcsetattr(STDIN_FILENO, TCSANOW, &tty);
}
Run Code Online (Sandbox Code Playgroud)