caoxiaolin 发表于 2020-9-25 22:06

C语言学习之控制台密码输入【带回显】

C语言学习之控制台密码输入

自己写的一个控制台输入密码函数,可以隐藏,并且可以显示,在隐藏       新人 学习C语言{:301_986:}

源码奉上
/*
        2020年9月25日21:50:28

*/

#include <stdio.h>
#include <conio.h>
#include <windows.h>

/*
        包含头文件
                stdio.h
                conio.h
                windows.h
        密码输入:
                英文、数字
                len_pd 密码长度 (字符数组的长度)
                str        字符数组指针
                例子:
                        char password;
                        Input_pd(17, password);
                        输入一个长度最大为16个字符的密码 其中最后空间用于保存\0
                        超过最大长度后自动退出
*/
void Input_pd(int len_pd, char* str);

int main(void)
{
       
        char password;

        Input_pd(17, password);
        printf("\n你输入的密码为:%s\n", password);
       
        return 0;
}


void Input_pd(int len_pd, char* str)
{
        char* password;
        int n_input_pd = 0;
       
        len_pd -= 1;
        password = str;
        while (n_input_pd < len_pd)
        {

                password = _getch();
               
                /*
                        自行添加
                        if(输入验证)
                        {
                                return -1;
                        }
                */
               
                if (password == '\r')
                {
                        break;
                }
                //删除功能 循环判断是否 连续删除
                while (password == '\b')
                {
                        putchar('\b');
                        putchar(' ');
                        putchar('\b');
                        if (n_input_pd) //判断是否减到0 如果是0 则不继续减少下标
                                --n_input_pd;
                        password = _getch(); //获取下一次的输入
                        /*
                                自行添加
                                if(输入验证)
                                {
                                        return -1;
                                }
                        */
                       
                        if (password == '\r')
                        {
                                goto end;
                        }
                }

                //回显
                putchar(password);
                //退格 打印*
                putchar('\b');
                Sleep(150);
                putchar('*');
                ++n_input_pd;
        }
end:
        password = '\0'; //添加结束标记
        return;
}





效果


哈哈,可不可以给点cb 穷的叮当响了{:301_986:}

ldw471427015 发表于 2020-9-25 22:55

简单明了

涛之雨 发表于 2020-9-25 22:56

写的很好,清晰明了。
但是没必要goto吧?
直接补齐字符串return就可以了吧?

哒劳德 发表于 2020-9-26 00:33

星号睡了150秒,有没有可以无限时间的,没有限制,不然你这个150秒就没用了呀

caoxiaolin 发表于 2020-9-26 07:08

哒劳德 发表于 2020-9-26 00:33
星号睡了150秒,有没有可以无限时间的,没有限制,不然你这个150秒就没用了呀

你是说输入之后一直显示最后输入的哪个字符吗?

caoxiaolin 发表于 2020-9-26 07:09

涛之雨 发表于 2020-9-25 22:56
写的很好,清晰明了。
但是没必要goto吧?
直接补齐字符串return就可以了吧?

多些指点,这个原来在main里面些的,现在改成函数分享出来,就没改

caoxiaolin 发表于 2020-9-26 08:07

哒劳德 发表于 2020-9-26 00:33
星号睡了150秒,有没有可以无限时间的,没有限制,不然你这个150秒就没用了呀

不知道怎么让光标移回去,如果能移回去的话,每次输入直接显示,等下一次输入的时候移回光标输入*然后在把光标移动到下次输入的位置就应该就可以了

xtyangl 发表于 2020-10-27 21:26

多些指点,这个原来在main里面些的,现在改成函数分享出来,就没改
页: [1]
查看完整版本: C语言学习之控制台密码输入【带回显】