C语言 命令行模仿密码输入

今天碰到个很有趣的问题:
怎么用C语言怎么实现类似密码输入的效果?(输入一个字符时用*号表示)

群里就有大佬回答了这个问题:
有个好玩的函数的 叫getch(注意与getchar区分)

getch函数介绍如下

1
2
3
4
5
getch();
头文件 :conio.h
函数用途:从控制台读取一个字符,但不显示在屏幕上
函数原型:int getch(void)
返回值:读取的字符

注意:

1.在使用之前要调用initscr(),结束时要调用endwin()。否则会出现不输入字符这个函数
  也会返回的情况。
2.在不同平台,输入回车,getch()将返回不同数值,而getchar()统一返回10(即\n)
(1)windows平台下ENTER键会产生两个转义字符 \r\n,因此getch返回13(\r)。
(2)unix、 linux系统中ENTER键只产生 \n ,因此getch返回10(\n)。
(3)MAC OS中ENTER键将产生 \r ,因此getch返回13(\r)。
3.getch();并非标准C中的函数,不存在C语言中。所以在使用的时候要注意程序的可移植性。

e.g

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<conio.h>
#include<stdio.h>
int main(){
int d=0;
char password[18];
char ch;
while((ch=_getch())!='\r'){//如果输入的不是回车
if(ch!='\b'){ //如果输入的不是退格键
printf("*"); //打印一个 * 代表输入一个字符
password[d++]=ch; //先把字符存在password[d]里,然后d++;
}
else{ // 如果输入的是退格键
printf("\b \b"); //将光标左移一格,用空格代替*,再左移一格
d--;
}
}
printf("\n");
puts(password);
return 0;

}