This is my first blog C++密码输入程序
目前大一,秃头专业,试水博客
话不多说,开始正题
现在刚开始学C++,学到类的使用
想想我们平时输入密码的时候,显示出来的是***,然后也有显示功能
这里需要用的头文件
如何实现无回显呢,想知道键盘上的各个键的键值吗?先来个测试
#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;
}
注意:一开始刚定义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退格符号实现,下次再弄啦