dom*_*om0 16 c++ console iostream cout cin
可能重复:
从std :: cin读取密码
我不能正常使用控制台,所以我的问题可能很容易回答或无法做到.
是否有可能"脱钩" cin和cout,让我输入到调音台不直接在它再次出现?
我需要这个让用户输入密码,我和用户通常都不希望他的密码出现在plaintext屏幕上.
我尝试使用std::cin.tiea stringstream,但我输入的所有内容仍然在控制台中镜像.
小智 36
从如何隐藏文字:
视窗
#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
Run Code Online (Sandbox Code Playgroud)
清理:
SetConsoleMode(hStdin, mode);
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
你真的在问两个不相关的问题.
调用cin.tie( NULL )解耦std::cin和std::cout
完全.但它不会影响较低级别的任何事情.并且在最低级别,至少在Windows和Unix下,std::cin并且std::cout都在系统级别连接到同一设备,并且正是该设备(/dev/tty在Unix下)进行回声; 您甚至可以将标准重定向到文件,控制台仍然会回显输入.
你如何关闭这种回声取决于系统; 最简单的解决方案可能是使用某种第三方库,如curses或ncurses,它提供更高级别的接口,并隐藏所有系统依赖项.
| 归档时间: |
|
| 查看次数: |
34319 次 |
| 最近记录: |