c++ - 在 Windows 中将用户输入隐藏为星号?

标签 c++ windows console-application windows-console

我需要创建一个简单的密码程序,该程序要求用户输入密码,当用户输入时,它将字符显示为星号。

每个教程都使用 getch()(在 conio.h 中)。但我不想用它。有没有简单的替代方法可以做到这一点?

我使用的是 Windows 10。

P.S:请不要将此问题与此问题混淆:Alternative function in iostream.h for getch() of conio.h?

因为该问题要求保留屏幕输出,而我需要将输入屏蔽为星号。

最佳答案

我们这里使用的是非标准功能。所以,无论你做什么,它都不是可移植的。

native 控制台方式是 ReadConsoleInput() 如上所述 here 。在您的情况下,您首先需要通过清除控制台模式标志 ENABLE_LINE_INPUT 来禁用回显和行输入模式。和ENABLE_ECHO_INPUT 。然后您可以通过显示“*”来对关键事件使用react。最后不要忘记恢复初始控制台模式。

快捷方式是保存并更改控制台模式(如上面的代码所示),然后循环 cin.get()并回响cout<<'*';接下来是 cout.flush();确保输出不会在缓冲区中等待,从而给用户带来不适。

关于c++ - 在 Windows 中将用户输入隐藏为星号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58571242/

相关文章:

windows - 设置 rhc 时出错(red hat 客户端工具)

windows - 计算 CMD 和批处理文件中的字母数

c# - 为什么 Console.Out.WriteLine 存在?

c++ - 双指针运算

windows - 在 python 2.7 ctypes 中构建 UCS4 字符串缓冲区

c++ - 跨平台编译和安装程序

c#-4.0 - 在调试或发布控制台应用程序中创建文件夹

c++ - 确保单个实例并为 Windows C++ 控制台应用程序传递参数的正确方法

c++ - boost shared_ptr <XXX> 线程安全吗?

c++ - 为什么我的签名与亚马逊的示例不同? (C++/REST/授权签名版本 4)