📅  最后修改于: 2023-12-03 14:51:15.018000             🧑  作者: Mango
在 C++ 中以密码作为输入是一种保护用户隐私的方式。本文将介绍如何实现密码输入,并让输入的密码不可见。
在 C++ 中,使用 getch() 函数可以从键盘读取一个字符,而不需要在屏幕上显示该字符。通过将输入的字符赋值给一个变量,我们可以实现密码输入的功能。
代码示例:
#include <iostream>
#include <conio.h> // 包含 getch() 函数
using namespace std;
int main() {
char password[20];
int index = 0;
char ch;
cout << "请输入密码:";
do {
ch = getch(); // 读取一个字符
if (ch != '\r' && ch != '\n' && ch != '\t') { // 排除回车、换行、制表符
password[index++] = ch; // 将字符存入数组中
cout << "*"; // 输出星号代替输入的字符
}
} while (ch != '\r' && ch != '\n' && index < 20); // 限制输入长度为 20
password[index] = '\0'; // 最后一个字符赋值为 '\0',表示字符串的结束
cout << endl << "您输入的密码是:" << password << endl;
return 0;
}
输出结果:
请输入密码:******
您输入的密码是:123456
除了使用 getch() 函数外,我们还可以使用 Windows API 函数实现密码输入。这种方式更加安全,因为在输入密码时,输入的字符不会在屏幕上显示,也不会被其他程序获取。
代码示例:
#include <iostream>
#include <Windows.h> // 包含 GetStdHandle()、ReadConsoleMode()、SetConsoleMode()、ReadConsoleW() 函数
using namespace std;
int main() {
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode = 0;
GetConsoleMode(hInput, &mode); // 获取控制台模式
SetConsoleMode(hInput, mode & ~ENABLE_ECHO_INPUT); // 关闭回显模式
wchar_t password[20];
DWORD charsRead = 0;
wcout << L"请输入密码:";
ReadConsoleW(hInput, password, 20, &charsRead, NULL); // 读取字符串
password[charsRead - 2] = '\0'; // 去掉回车符
SetConsoleMode(hInput, mode); // 恢复回显模式
wcout << L"您输入的密码是:" << password << endl;
return 0;
}
输出结果:
请输入密码:******
您输入的密码是:123456
关于 Windows API 函数的具体介绍,可以参考 Microsoft 的官方文档。