c++ - 在密码提示中隐藏用户输入

标签 c++ console iostream cout cin

Possible Duplicate:
Read a password from std::cin

我不能正常使用控制台,所以我的问题可能很容易回答或不可能做到。

是否可以将cincout“解耦”,这样我在控制台中输入的内容就不会再次直接出现在其中了?

我需要这个来让用户输入密码,而我和用户通常都不希望他的密码以 plaintext 出现在屏幕上。

我尝试在 stringstream 上使用 std::cin.tie,但我输入的所有内容仍然反射(reflect)在控制台中。

最佳答案

来自 How to Hide Text :

Windows

#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

int main()
{
    HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); 
    DWORD mode = 0;
    GetConsoleMode(hStdin, &mode);
    SetConsoleMode(hStdin, mode & (~ENABLE_ECHO_INPUT));

    string s;
    getline(cin, s);

    cout << s << endl;
    return 0;
}//main 

清理:

SetConsoleMode(hStdin, mode);

tcsetattr(STDIN_FILENO, TCSANOW, &oldt);

Linux

#include <iostream>
#include <string>
#include <termios.h>
#include <unistd.h>

using namespace std;

int main()
{
    termios oldt;
    tcgetattr(STDIN_FILENO, &oldt);
    termios newt = oldt;
    newt.c_lflag &= ~ECHO;
    tcsetattr(STDIN_FILENO, TCSANOW, &newt);

    string s;
    getline(cin, s);

    cout << s << endl;
    return 0;
}//main 

关于c++ - 在密码提示中隐藏用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6899025/

相关文章:

c++ - 带有恢复选项的 C++ 中的暴力字符串生成器

c# - 读取 double 类型的用户输入

java - 在编辑器 Pane 上打印 groovy 控制台

C++ OStream 继承和操纵器

c++ - iostream 对象 cin、cout、cerr 和 clog 是如何实现的?

c++ - VS2015 和 clang 编译此代码,但 g++ 拒绝它。哪一个是正确的?

c++ - 如何重载运算符 -= C++

c++ - 为什么这不被视为默认构造函数?

google-chrome - Active Adblock Plus 在 Chrome JS 控制台中显示奇怪的错误

c++ - 如果不包含<string.h>,为什么我的程序可以成功编译?