gpt4 book ai didi

c++ - 如何删除密码屏蔽c++中的字符

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:06 25 4
gpt4 key购买 nike

我目前正在为我的项目制作一个登录表单,但我无法继续进行此操作。我希望我的程序在我按下退格按钮时删除一个字符(在密码中),但程序没有读取它。

这是我的代码

string username, password, power;
char ast=' ';
int aste = 0, accessLevel;
ofstream addAcc;
addAcc.open("Accounts.txt");
cout<<"Username: ";cin.ignore();getline(cin, username);
cout<<"Password: ";
do
{
ast = getch();

if (ast == 13 || ast == ' ' )
{
break;
}
if(ast==8 || password!="")
{
cout<<"\b \b";
password.erase(password.size()-1);
}
cout<<"*";
password+=ast;
aste ++;
}while(ast!=13 || ast!=' ');
do
{
cout<<"Enter Access Level(0-1): ";cin>>accessLevel;
switch(accessLevel)
{
case 0:
{
power = "Cashier";
break;
}
case 1:
{
power = "Manager";
break;
}
default:
cout<<"Invalid access level."<<endl;
}
}while(accessLevel>1||accessLevel<0);

感谢那些愿意提供帮助的人。

最佳答案

在某些平台上,getch() 将在您按下 BACKSPACE 时返回 DEL 字符 (ascii 127)。所以改变你的线路

if(ast==8 || password!="")

if((ast==8 || ast==127) && !password.empty())

您可能不想每次 password 也不是空字符串时都删除一个字符,所以我删除了 || password!="" 也来自条件。如果密码不为空,您只想 删除一个字符。所以你需要 && 而不是 ||

另请注意,您要无条件地添加 getch() 返回的字符。因此,如果用户输入 BACKSPACE,您将删除最后一个字符,但将 BACKSPACE 附加到密码。因此,如果 getch() 返回的字符不是 BACKSPACE(或 DEL),您应该只附加该字符。

因此您的代码可能如下所示:

if((ast==8 || ast==127) && !password.empty())
{
cout<<"\b \b";
password.erase(password.size()-1);
aste--;
}
else
{
password+=ast;
cout<<"*";
aste++;
}

关于c++ - 如何删除密码屏蔽c++中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25102217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com