C++ 获取字符串输入而不显示其实际内容(用于密码)

C++ 获取字符串输入而不显示其实际内容(用于密码),c++,C++,如何创建一个输入函数,它不显示您输入的内容,而是显示另一个字符? 例如,假设您输入了“hello”,它不显示任何内容或显示“****”。具有适当的退格功能。 提前感谢编辑:看起来你已经知道你自己问题的答案了?我会把这个放在这里,以防其他人发现它有用 ¯\_(ツ)_/¯ 我假设您希望在控制台应用程序中执行此操作,并且您可能在Windows上。如果是这样的话,我在网上找到了这个解决方案——也许可以试试这个方法。链接也有其他平台的方法 #include <iostream> #inclu

如何创建一个输入函数,它不显示您输入的内容,而是显示另一个字符? 例如,假设您输入了“hello”,它不显示任何内容或显示“****”。具有适当的退格功能。
提前感谢编辑:看起来你已经知道你自己问题的答案了?我会把这个放在这里,以防其他人发现它有用

¯\_(ツ)_/¯
我假设您希望在控制台应用程序中执行此操作,并且您可能在Windows上。如果是这样的话,我在网上找到了这个解决方案——也许可以试试这个方法。链接也有其他平台的方法

#include <iostream>
#include <string>
#include <windows.h>
using namespace std;


string getpass(const char *prompt, bool show_asterisk=true)
{
  const char BACKSPACE=8;
  const char RETURN=13;

  string password;
  unsigned char ch=0;

  cout <<prompt<<endl;

  DWORD con_mode;
  DWORD dwRead;

  HANDLE hIn=GetStdHandle(STD_INPUT_HANDLE);

  GetConsoleMode( hIn, &con_mode );
  SetConsoleMode( hIn, con_mode & ~(ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT) );

  while(ReadConsoleA( hIn, &ch, 1, &dwRead, NULL) && ch !=RETURN)
    {
       if(ch==BACKSPACE)
         {
            if(password.length()!=0)
              {
                 if(show_asterisk)
                     cout <<"\b \b";
                 password.resize(password.length()-1);
              }
         }
       else
         {
             password+=ch;
             if(show_asterisk)
                 cout <<'*';
         }
    }
  cout <<endl;
  return password;
}
#包括
#包括
#包括
使用名称空间std;
字符串getpass(const char*prompt,bool show\u asterisk=true)
{
const char BACKSPACE=8;
const char RETURN=13;
字符串密码;
无符号字符ch=0;

CUT< P>在C++中没有标准的方法来做这件事。 不同的操作系统提供不同的API来与(虚拟)终端交互。在这个更具体的问题中,Linux有一个解决方案:

对于windows, 使用

这是一种正常的方法。此函数返回屏幕上未显示的字符串

但我们可以使用iostream和

字符串encPasswd(const char\u dsp){
字符串_final=“”;
char chr_ipt;
while(true){
chr_ipt=getch();
if(chr_ipt<32&&chr_ipt!=8)
返回(u final);;
如果(chr_ipt==8&&u final.length()!=0){
_final.pop_back();

CUT我不明白,如果你知道怎么做这个问题,那为什么你不可能使用标准C++?需要OS特定的功能。而且因为你没有告诉我们你正在瞄准的OS,我们不能回答你的问题。@ VECRTRX < COD> CONIO.H./COD>在Linux上是不可用的。而且,这不是一个竞争。请阅读。特别是,也可以使用和读取,正如我所说的,使用标准C++是不可能的。 CONIO.H./CUD>头文件不是标准的C++头文件。它是Windows.hope中的一个旧DOS剩余物。第二个是非常简单和有用的。
string passwdIO()
{
    HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); 
    DWORD mode = 0;
    GetConsoleMode(hStdin, &mode);
    SetConsoleMode(hStdin, mode & (~ENABLE_ECHO_INPUT));
    string input;
    getline(cin, input);
    SetConsoleMode(hStdin, mode);
    return input;
}
string encPasswd(const char _dsp){
    string _final = "";
    char chr_ipt;
    while(true){
        chr_ipt = getch();
        if (chr_ipt < 32 && chr_ipt != 8)
            return _final;
            if(chr_ipt == 8 && _final.length() != 0){
            _final.pop_back();
            cout << "\b \b";
            continue;
        }
        if(chr_ipt == 8 && _final.length() == 0) continue; 
        // without this^ program will crash at some point

        _final.push_back(chr_ipt);
        cout << _dsp;
    }
}