【问题标题】:How do I hide user input with cin in C++? [duplicate]如何在 C++ 中使用 cin 隐藏用户输入? [复制]
【发布时间】:2012-12-04 00:23:20
【问题描述】:

可能重复:
Read a password from std::cin

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

Please enter password: [don't show input]
Please re-enter password: [don't show input]

我该怎么做?我使用的是 Linux,所以我将无法使用任何 Windows 库(windows.h 等)。

【问题讨论】:

  • 您是否仔细阅读过 istream 文档以了解设置无回显属性的方法?
  • @John,您不会在任何标准 C++ 文档中找到它。

标签: c++ linux user-input


【解决方案1】:

您不能直接使用 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);
}

【讨论】:

  • 谢谢,效果很好!
【解决方案2】:

您需要调用tcsetattr 并修改ECHO 标志。

【讨论】:

    猜你喜欢
    • 2015-08-06
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2023-03-22
    • 2018-08-27
    • 1970-01-01
    • 2010-11-15
    • 2015-01-12
    相关资源
    最近更新 更多