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