読書、パスワードからstd::cin
-
06-07-2019 - |
質問
私は読み取りが必要になり、パスワードの標準入力からしたかったので std::cin
しないエコー文字入力ユーザによる...
たいのですが無効のエコーからstd::cin?
こちらのコードを使ってい:
string passwd;
cout << "Enter the password: ";
getline( cin, passwd );
を探していOS agnosticうではないかと思います。こちらの あめんなさいでWindowsとは*nix.
解決
@wrang-wrang答えたのは本当に良いってなかったのに対する監督機能を果たし、これが私の最終コードを基調とした この いの顔を表現してください:
#ifdef WIN32
#include <windows.h>
#else
#include <termios.h>
#include <unistd.h>
#endif
void SetStdinEcho(bool enable = true)
{
#ifdef WIN32
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
if( !enable )
mode &= ~ENABLE_ECHO_INPUT;
else
mode |= ENABLE_ECHO_INPUT;
SetConsoleMode(hStdin, mode );
#else
struct termios tty;
tcgetattr(STDIN_FILENO, &tty);
if( !enable )
tty.c_lflag &= ~ECHO;
else
tty.c_lflag |= ECHO;
(void) tcsetattr(STDIN_FILENO, TCSANOW, &tty);
#endif
}
使用例:
#include <iostream>
#include <string>
int main()
{
SetStdinEcho(false);
std::string password;
std::cin >> password;
SetStdinEcho(true);
std::cout << password << std::endl;
return 0;
}
他のヒント
あるものです。
Unix、書き込むバイトマジックによって端子タイプです。
使用 getpasswd 場合ますので、注意してください。
できるシステム() /usr/bin/stty -echo
を無効にするエコー /usr/bin/stty echo
すことができるようにするものunix).
内容はこちらからご確認くださを説明し どのような使用しないで"stty";しんでやっている。
いつ、携帯性に利用できる _getch()
に VC
.
#include <iostream>
#include <string>
#include <conio.h>
int main()
{
std::string password;
char ch;
const char ENTER = 13;
std::cout << "enter the password: ";
while((ch = _getch()) != ENTER)
{
password += ch;
std::cout << '*';
}
}
もあります getwch()
のための wide characters
.帰りのバスの時間はご使用になることを NCurse
る可能 *nix
システムもございます
みかん、んだパスワードをcharによるchar、後で印刷backspace("\b")か'*'.
所属していません StackOverflow