替换输入的密码为星号【C语言】

用户输入密码时,希望把密码隐藏,比如替换为星号*


思路

  • 判断用户是否由有键入
  • 有则输出一个星号,否则略过
  • 如果键入回车字符,终止程序

一些准备工作

  • IDE: VC++6.0
  • 了解可能用到的特殊函数: getch(),来自conio.h
  • 了解需要用到的特殊字符的ASCII码: 8 \b 退格、10 \n 换行、13 \r 回车

开始写代码

  • 预处理指令:
# include <stdio.h>
# include <conio.h>     //getch()
# define MAX_PW_LEN 16  //密码最大长度
  • 主函数:
int main(void)

{
    char storePassword[MAX_PW_LEN] = {'\0'};    //存储用户输入的密码

    printf("Password: ");
    getPassword(storePassword, MAX_PW_LEN);     //获取用户输入的密码

    printf("\nCheck: %s\n", storePassword);     //检验结果

    return 0;
}
  • 自定义函数getPassword():
//如果把此函数写在main函数后面,记得在main函数前面某行处,加上函数声明!
void getPassword(char * storePw, int maxPwLen)
{
    char c = '\0';          //存放用户键入的每个字符
    char * pc = storePw;    //为方便指向密码字符串中每个字符
    int pwlen = 0;          //当前password的长度

    while(1)
    {
        c = getch();

        //如果用户按下回车符,停止循环
        if (c == '\r')
            break;

        //将用户输入的有效字符存入密码串,不考虑空字符'\0'
        if (pwlen >= 0 && pwlen < maxPwLen-1 && c)
        {
            *pc = c;
            pc++;
            pwlen++;
            putchar('*');
        }
    }
}
  • 编译链接运行:
    程序运行结果

更多尝试

  • 如果输入超多字符:
    没反应,因为pwlen >= 0 && pwlen < maxPwLen-1 && c这里已经限制了有效字符个数

  • 如果不小心输入错误,想退格:
    if (c == '\r') break;后面加上下面那部分

//响应退格, 当心有效字符串的当前长度为0
if (c == '\b')
{
    if (pwlen >0)
    {
        pc--;
        pwlen--;
        printf("\b \b");   //退格退的是光标,用个空格覆盖,假装撤销打印的星号*
    }
    continue;
}

扩展

  • 考虑一下:

    • 获取用户从键盘的输入,用scanf语句,或者函数getchar(),会怎样?
    • 如果不用退格的方法,而是用循环打印星号*,会怎么样?
    • emmmm,暂时只想到这么多……
  • 总结:

    • 目标。 用C语言实现一个将其他字符转换为星号*的功能
    • 准备工作。 写代码的环境、代码的思路、所需要的C语言相关的知识
    • 写查改。 开始撸代码,完成预想的功能
    • 完善工作。 尝试一些非法或奇怪的操作,用以测试代码

最后

源代码已上传,
水平不高,可能还有做得不够好的地方,
希望能和大家交流学习,
转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值