那么如何将第一次使用_getch函数输入到ps数组中的密码,以便第二次输入密码不被第一次输入的密码影响
时间: 2024-02-25 09:59:04 浏览: 23
为了避免第一次输入的密码影响第二次输入的密码,可以在两次输入密码之间清空数组ps。可以在获取第一次密码之前,先将ps数组清空,再进行第一次密码输入。代码如下:
```
printf("请输入密码:");
int j = 0;
memset(ps, 0, sizeof(ps)); // 清空数组ps
while ((ps[j] = _getch()) != '\r') {
printf("*");
j++;
}
ps[j] = '\0';
printf("\n");
// 第一次输入密码完成后,再次清空数组ps
memset(ps, 0, sizeof(ps));
printf("请再次输入密码:");
j = 0;
while ((ps[j] = _getch()) != '\r') {
printf("*");
j++;
}
ps[j] = '\0';
printf("\n");
```
在第一次输入密码之前,使用memset函数将数组ps清空,以确保第一次输入的密码不会影响第二次输入的密码。同时,第二次输入密码也需要清空数组ps。这样,就可以保证每次输入密码时,都是从数组ps的第一个元素开始存储,不会受到上一次输入密码的影响。
相关问题
帮我用C写一段LCD1602密码输入的函数
以下是使用C语言编写的LCD1602密码输入函数示例:
```
#include <reg52.h> // 引入 8051 单片机的头文件
#include <intrins.h>
#define LCD_DATABUS P0 // 将 P0 端口定义为 LCD1602 的数据总线
sbit RS = P1^0; // 将 P1.0 端口定义为 LCD1602 的 RS 信号线
sbit RW = P1^1; // 将 P1.1 端口定义为 LCD1602 的 RW 信号线
sbit EN = P1^2; // 将 P1.2 端口定义为 LCD1602 的 EN 信号线
void delay(unsigned int i) // 延时函数
{
while(i--);
}
void write_cmd(unsigned char cmd) // 写命令函数
{
RW = 0; // 将 RW 置为 0,表示要写入命令
LCD_DATABUS = cmd; // 将命令写入数据总线
EN = 1; // 将 EN 置为 1
_nop_(); // 延时一个机器周期
EN = 0; // 将 EN 置为 0
}
void write_data(unsigned char dat) // 写数据函数
{
RW = 0; // 将 RW 置为 0,表示要写入数据
RS = 1; // 将 RS 置为 1,表示要写入的是数据
LCD_DATABUS = dat; // 将数据写入数据总线
EN = 1; // 将 EN 置为 1
_nop_(); // 延时一个机器周期
EN = 0; // 将 EN 置为 0
}
void init_lcd() // 初始化 LCD1602 函数
{
write_cmd(0x38); // 设置数据总线为 8 位,显示模式为 2 行 5x7 点阵字符
write_cmd(0x0C); // 开启显示,光标关闭,光标闪烁关闭
write_cmd(0x06); // 光标右移,字符不移动
write_cmd(0x01); // 清屏
}
void lcd_display(unsigned char x, unsigned char y, unsigned char *str) // 在指定位置显示字符串函数
{
unsigned char addr;
if (y == 0)
addr = 0x80 + x;
else
addr = 0xC0 + x;
write_cmd(addr);
while(*str)
write_data(*str++);
}
void lcd_password_input(unsigned char x, unsigned char y, unsigned char len, char *password) // 密码输入函数
{
unsigned char i = 0;
char c;
while(i < len) {
c = getch(); // 从串口接收一个字符
if(c == '\b' && i > 0) { // 如果是退格键并且当前密码长度大于 0
i--; // 将密码长度减 1
lcd_display(x + i, y, " "); // 在 LCD 上清除当前位置的字符
}
else if(c >= '0' && c <= '9') { // 如果是数字字符
password[i] = c; // 将该字符存入密码数组
i++; // 将密码长度加 1
lcd_display(x + i - 1, y, "*"); // 在 LCD 上显示 * 号
}
}
password[len] = '\0'; // 在密码字符串最后添加一个字符串结束符
}
void main()
{
unsigned char password[6];
init_lcd(); // 初始化 LCD1602
lcd_display(0, 0, "Input Password:"); // 在第一行显示提示信息
lcd_password_input(0, 1, 6, password); // 在第二行输入密码
lcd_display(0, 0, "Password:"); // 在第一行显示提示信息
lcd_display(0, 1, password); // 在第二行显示输入的密码
while(1);
}
```
这段代码使用了 8051 单片机和 LCD1602 显示屏,可以实现在 LCD1602 上输入密码并显示。在 `lcd_password_input` 函数中,我们使用了 `getch()` 函数从串口接收一个字符作为密码输入,这个函数需要根据具体的硬件和软件环境进行实现,如果你正在使用的是 Arduino 或其他开发板,可以查看相应的文档来实现串口输入函数。
在DOSBOX,实现编写程序可以进行密码的设置(第一次)和修改(已设置密码)。要求输入的密码用*显示。
好的,您可以按照以下步骤来实现:
1. 在DOSBOX中打开编辑器,例如使用edit命令。
2. 编写程序来实现密码的设置和修改。您可以使用C或者其他编程语言来实现。
3. 在程序中使用getch()函数来获取键盘输入的字符,然后将其转换为*字符进行显示。
4. 对于第一次设置密码,您可以将密码保存到一个文件中,以便下次修改时进行验证。
5. 对于已经设置过密码的情况,您需要读取保存的文件中的密码,并与用户输入的密码进行比较,以验证密码是否正确。
6. 编译并运行您的程序,测试其是否能够正常实现密码的设置和修改功能。
希望这些步骤能够对您有所帮助!
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)