在Windows中将用户输入屏蔽为星号

Masking the user input as asterisks in Windows?

本文关键字:屏蔽 输入 用户 Windows      更新时间:2023-10-16

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

每个教程都使用getch()(在conio.h中(。但我不想用它。有什么简单的替代方法吗?

我正在使用Windows 10。

p.S:请不要混淆这是这个问题的重复:conio.h的getch((在iostream.h中的替代函数?

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

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

本机控制台的方式将是ReadConsoleInput(),如这里所解释的。在您的情况下,您将首先通过清除控制台模式标志ENABLE_LINE_INPUTENABLE_ECHO_INPUT来禁用回波和线路输入模式。然后,您将通过显示"*"来对关键事件作出反应。最后不要忘记恢复初始控制台模式。

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