C/C++删除屏幕上部分已输出字符并回退光标

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("*");
	}

这样一整登录过程就显得高级多了==。

  • 9
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值