关于getch()的回车无法结束输入以及无法获取退格的理解
//这是一段类似于我们输入密码时,用*号屏蔽我们输入的密码的测试代码
#include <stdio.h>
#include <conio.h>
int main()
{
char c;
char password[32];
int i = 0;
printf("请输入密码:");
while (1)
{
//getch()这个函数是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车
//函数用途:从控制台读取一个字符,但不显示在屏幕上
c = _getch();
//windows平台下按下回车(ENTER)键会产生两个转义字符 \r\n,因此getch返回13(\r),
// 而'\n‘的的转义字符无法读取,因此无法通过判断'\n'的方式结束输入,
//可以通过读取第一个转义字符进行判断结束输入
if (c == '\r')//按下回车键时结束输入,退出
{
password[i] = '\0';
break;
}
if (c == '\b')//遇到退格键时(←Backsapce)
{
//当没有输入密码时,即输入的密码为空时,不进行任何操作
//即输入的密码不为空时,对显示的字符进行退格
if (i > 0)
{
i--;
//对显示的字符进行退格,两个\b之间存在一个空格,我用vs2015进行的测试,
//不懂存不存在编译器的问题,有待考证
printf("\b \b");
password[i] = '\0';//修改输入的字符
continue;
}
}
else//没有遇到回车键时和退格键时,读取输入的密码存储在字符串password中
{
printf("*"); //对输入的密码在控制台显示*号
password[i] = c;//存储输入的字符
if (i < 32) i++;
}
}
printf("\n\n");
if (i > 0) printf("输入密码为:%s", password);
else printf("输入的密码为空");
return 0;
}