C/C++删除屏幕上部分已输出字符并回退光标
起因是想写一个输入密码时,在屏幕上显示星号而不显示具体密码的代码。这个网上大把教程,include<conio.h>,用其中的getch()函数即可,这个函数在获取输入时不会把输入显示在屏幕上,我们自己打印一个星号就行了。
但是问题来了,如果输入的时候不小心输错了,想要按delete键删除怎么办?如果按delete键它也会被读成一个字符,然后输出一个*号,这完全达不到删除的效果啊。想要解决这个问题,就要用到’\b’,也就是delete键对应的退格符了。
具体的方法如下:
//printf('\b')的作用是把屏幕上的光标回退一格
printf('\b'); //回退一格光标
printf(' '); //打印一个空格把要删除的字符覆盖了
printf('\b'); //再回退一格光标来掩饰掉打印的空格
整个输密码的代码如下,C++也一样通用的。
char password[100] = {0};
printf("please input the password:\n");
int i = 0;
while (1) {
char c = getch();
if (c == '\r') { //输入回车就退出循环
break;
}
if (c == '\b') { //delete键
if (i > 0) {
password[i - 1] = '\0';
i--;
}
printf("\b"); //输出\b,让光标回退一格
printf(" \b"); //输出空格覆盖掉要删除的字符,然后输出\b再把光标回退。
continue;
}
password[i++] = c;
printf("*");
}
这样一整登录过程就显得高级多了==。