输入密码

This is my first blog C++密码输入程序

一.self-production

​ 目前大一,秃头专业,试水博客

二.正文

​ 话不多说,开始正题

​ 现在刚开始学C++,学到类的使用

1.C++实现无回显输入密码程序

①无回显

​ 想想我们平时输入密码的时候,显示出来的是***,然后也有显示功能

​ 这里需要用的头文件以及其下函数getch()

​ 如何实现无回显呢,想知道键盘上的各个键的键值吗?先来个测试

#include
#include
using namespace std;
class Password
{
     
private:
    string s;

public:
    void test01()
    {
     
       char c;
       c=getch();
       cout<<(int)c<<endl;
    }
    void test02()
    {
        s="";
        char c;
        cout<<"password:";
        while(true)
        {
     
            c=getch();
            if(c==13)//输入回车就结束
                break;
            else
            {
     

                s=s+c;//c++支持字符串与字符相加
                cout<<"*";
            }


        }
    }
};
int main()
{
     
    Password p1;
    int n;
    cout<<"1.测试键值"<<endl;
    cout<<"2.测试无回显"<<endl;
    cout<<"请输入您的选择"<<endl;
    cin>>n;
    if(n==1)
    {
     
         p1.test01();
    }
    else if(n==2)
    {
     
         p1.test02();
    }

    return 0;
}

②实现验证密码

​ 要实现输入密码与原密码比较,还有一个原始的限定次数,那么我们就来一个含参构造函数

#include
#include
using namespace std;
class Password
{
     
private:
    string s;//password
	int n;//times
public:
    Password(string ss,int nn)
    {
     
        s=ss;
        n=nn;
    }
    void password()
    {
        string temp;
        int i;
        char c;

        for(i=0;i<n;++i)
        {
     
            temp="";   //千万别忘了初始化为空字符串!
                
                
             cout<<"password:";
             while(true)
            {
     

                c=getch();
                if(c==13)//输入回车就结束
                    break;
                else
                {
     

                    temp=temp+c;//c++支持字符串与字符相加
                    cout<<"*";
                }


            }
            if(temp==s)
            {
     
                cout<<endl<<"loading in......"<<endl;
                break;

            }
            else if(i<n-1)
            {
     
                cout<<endl<<"try again"<<endl;
            }
            else
            {
     
                cout<<endl<<"We'll unlock it in five minutes"<<endl;
            }
        }

    }
};
int main()
{
     
    Password p1("hit0202",4);
    p1.password();



    return 0;
}

输入密码_第1张图片

注意:一开始刚定义string str的时候str是默认为空的

④实现退格键

//输入密码的程序:考虑退格键
#include
#include
using namespace std;


class Password
{
     
private:
    string pass_right,pass_input;//一开始默认是空字符串;
    int opp;//输入机会
    char c;
    int i;//退格那里要用到
public:
    Password(string s ,int n)
    {
     
        pass_right=s;
        opp=n;
    }
    void input()
    {
     
        cout<<"请输入密码:"<<endl;

        while(true)
        {
     
            c=getch();
            if(c==13)
            {
     
                if(pass_right==pass_input)
                {
     
                    cout<<endl<<"正在加载,请稍后"<<endl;
                    break;//别忘了跳出去
                }
                else
                {
     
                    --opp;
                    if(opp>0)
                    {
     
                        cout<<endl<<"你还有"<<opp<<"次机会"<<endl;
                        cout<<"请按任意键继续";
                        getch();
                        system("cls");
                        cout<<"请输入密码:"<<endl;
                        pass_input="";//因为要重新输入所以要变成空字符串

                    }
                    else
                    {
     
                        cout<<endl<<"请五分钟后再来解锁"<<endl;
                        break;//别忘了跳出去
                    }
                }
            }
            else if(c==8)
            {
     
                if(pass_input.size()>0)
                {
     
                    system("cls");//先清屏再输出
                    cout<<"请输入密码:";
                    pass_input.erase(pass_input.size()-1,1);
                    for(i=0;i<pass_input.size();++i)
                    {
     
                        cout<<"*";
                    }

                }
            }
            else
            {
     
                pass_input=pass_input+c;
                cout<<"*";
            }

        }
    }
};
int main()
{
     
    Password p1("hit0202",4);
    p1.input();
    return 0;




}

C++中erase的用法
erase一共三种用法:
1.erase(pos,n);
删除从下标pos开始的n个字符,比如erase(0,1)就是删除第一个字符
2.erase(position);
删除postion处的一个字符(position是一个string类型的迭代器)
3.erase(first,last)
删除从first到last之间的字符(first和last都是迭代器)

转载自:https://blog.csdn.net/fyf18845165207/article/details/82729704

//上面用的是第一种用法

*cls是清屏函数,那它把数据删除了吗?

并不是,上面的删除是通过erase实现的

为啥我会想到这个呢,因为之前

system("cls");//先清屏再输出
cout<<"请输入密码:";
pass_input.erase(pass_input.size()-1,1);

被我搞成了

pass_input.erase(pass_input.size()-1,1);
cout<<"请输入密码:";
system("cls");//先清屏再输出

结果发现错了,就怀疑是那个问题,后来经过如下验证,发现确实cls不能删除数据

#include
#include
#include
using namespace std;
int main()
{
     
    string str;
    char c='!';

    str="hello";
    cout<<str<<endl;

    system("cls");
    str=str+c;
    cout<<str<<endl;
}

上述输出结果为“hello!”

⑤其他想法

​ 1.如何实现输入完一个字符,先显示1秒,再变成*呢…emm,考虑了数组和时间戳,emm…初学C++,还没想到怎么搞

​ 2.我们平时输入密码如果错误次数太多了,会让你输入验证码再继续或者找回密码,也想在这个程序里面实现,这个以后再说吧

    string str;
    char c='!';

    str="hello";
    cout<<str<<endl;

    system("cls");
    str=str+c;
    cout<<str<<endl;
}

上述输出结果为“hello!”

⑤其他想法

​ 1.如何实现输入完一个字符,先显示1秒,再变成*呢…emm,考虑了数组和时间戳,emm…初学C++,还没想到怎么搞

​ 2.我们平时输入密码如果错误次数太多了,会让你输入验证码再继续或者找回密码,也想在这个程序里面实现,这个以后再说吧

​ 3.用\b退格符号实现,下次再弄啦

你可能感兴趣的:(C++入门,c++,密码学)