私はC++のプログラムを書いています。ここでは、ユーザーが画面に表示しないで文字列を受け取ることになっています(例:apassword)。私はcin
とgets
を使用して文字列を受け入れようとしました。しかし、どちらもコンソールでユーザーが入力した文字をエコーします。C++で文字通りの文字列が入力されない
C++で関数やその他の方法がありますか?
私はC++のプログラムを書いています。ここでは、ユーザーが画面に表示しないで文字列を受け取ることになっています(例:apassword)。私はcin
とgets
を使用して文字列を受け入れようとしました。しかし、どちらもコンソールでユーザーが入力した文字をエコーします。C++で文字通りの文字列が入力されない
C++で関数やその他の方法がありますか?
cin
で読み取ったデータがコンソールに表示されないようにする方法は、コンソールによって大きく異なります。それは確かにオペレーティングシステムに依存しています。
Windowsでは、SetConsoleMode
機能を使用して、標準の入力ハンドルを含むファイルハンドルのエコーを有効/無効にすることができます。
void enableStdinEcho(bool b) {
HANDLE hStdin = ::GetStdHandle(STD_INPUT_HANDLE);
DWORD mode = 0;
::GetConsoleMode(hStdin, &mode);
if (b) {
mode |= ENABLE_ECHO_INPUT;
} else {
mode &= ~ENABLE_ECHO_INPUT;
}
::SetConsoleMode(hStdin, mode);
}
よう
何かがおそらく標準入力のエコーを切り替えるために使用することができます。
Windowsシステムでは、gcc-linuxでgetpassを試してみました。 – ZoomIn
void enableStdinEcho(bool b){ \t int ttyDevice = STDOUT_FILENO; struct termios termAttributes; ; /*ファイル記述子がTTYデバイス用であることを確認してください。 */ if(!isatty(ttyDevice)){ exit(1); \t}他{ \t(のtcgetattr(ttyDevice、&termAttributes)!= 0){ \t \t \t \t終了すると(1)。他 \t \t \t} { \t \t \t \t IF(B == false)を \t \t \t \t \t termAttributes。c_lflag&=〜ECHO;他 \t \t \t \t \t \t \t \t \t termAttributes.c_lflag | = ECHO; \t \t \t \t \t \t \t \tのtcsetattr(ttyDevice、TCSANOW、&termAttributes)。 \t \t \t \t} } UNIX/Linuxベースで同等です。このようなことは機能しています。 – ZoomIn
C++標準ではこれを行うための仕組みが定義されていません。プラットフォーム固有のライブラリに依存する必要があります。 GCC/glibcの使用と例えば
http://www.gnu.org/software/libc/manual/html_mono/libc.html#getpass
getpass
これはC++、iostreamなどの質問ではありません。使用している端末固有の質問です。
アイディアについてはthis questionを参照してください。そこにはカバーされておらず、ncursesを使用できない場合は、端末固有の質問をしてください。
投稿開始時のHiは自動的に削除されます! – ZoomIn
はい、それは良いことです:私たちは、ここでの質問(および回答)を維持しようとします。 "Hi"と "thanks"を使用していない*スタックオーバーフローで無益だとみなされていません。とにかく、upvote、良い質問があります。 –
* NCurses *(unix)と* PDCurses *(ウィンドウ)をチェックしてください。 –