在C语言中完成键盘输入密码的方式有:隐藏输入字符、使用getch函数、控制台输入。本文将详细介绍这三种方法,并提供示例代码。
一、隐藏输入字符
为了在输入密码时隐藏字符,可以使用终端的特性来关闭回显功能。在Linux下,可以通过tcsetattr函数来实现。在Windows下,可以使用getch函数。以下是具体的实现方法。
1、在Linux下隐藏输入字符
在Linux系统下,可以使用termios库来管理终端的I/O属性,从而实现隐藏输入字符的功能。以下是示例代码:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
void disable_echo() {
struct termios tty;
tcgetattr(STDIN_FILENO, &tty);
tty.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &tty);
}
void enable_echo() {
struct termios tty;
tcgetattr(STDIN_FILENO, &tty);
tty.c_lflag |= ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &tty);
}
int main() {
char password[100];
printf("Enter password: ");
disable_echo();
scanf("%99s", password);
enable_echo();
printf("nYour password is: %sn", password);
return 0;
}
在这个代码中,disable_echo函数用于关闭终端的回显功能,而enable_echo函数则用于恢复回显功能。通过这种方式,可以实现密码输入时不显示字符。
2、在Windows下隐藏输入字符
在Windows系统下,可以使用conio.h库中的getch函数来实现隐藏输入字符的功能。以下是示例代码:
#include <stdio.h>
#include <conio.h>
int main() {
char password[100];
int i = 0;
char ch;
printf("Enter password: ");
while ((ch = getch()) != 'r') { // r is Enter key
if (ch == 'b') { // b is Backspace key
if (i > 0) {
printf("b b");
i--;
}
} else {
password[i++] = ch;
printf("*");
}
}
password[i] = '