gpt4 book ai didi

c++ - 如何在 C++ 中删除密码屏蔽

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:29 24 4
gpt4 key购买 nike

我正在创建用户名和密码。在此之前,当我输入 backspace 时,backspace 不是删除密码,而是输入一些东西,我想出了使用 ASCII,但我不知道脚本删除密码。

int a=0, i=0;
char uname[10], c=' ';
char pword[10], code[10];
char user[10]="user";
char pass[10]="pass";

a:

system("cls");
printf("\n\n\t\t\t======================================");
printf("\n\n\t\t\t| STUDENT REPORTING SCORE SYSTEM |");
printf("\n\n\t\t\t======================================");
printf("\n\n\t\t\t=========== LOGIN FIRST ============");
printf("\n\n\n\t\t\t\tENTER USERNAME : ");
scanf("%s", &uname);
printf("\n\n\t\t\t\tENTER PASSWORD : ");
while(i<10)
{
pword[i]=getch();
c=pword[i];
if(c==13) break;
else if(c==8)
//here is the blank
else printf("*");
i++;
}
pword[i]='\0';
i=0;

if(strcmp(uname,"user")==0 && strcmp(pword,"pass")==0)
{
printf("\n\n\n\t\t\tWELCOME TO STUDENT REPORTING SCORE SYSTEM\n\t\t\t\t LOGIN IS SUCCESSFUL");
printf("\n\n\n\t\t\t Press any key to continue...");
getch();
}
else
{
printf("\n\n\n\t\t\t SORRY !!!! LOGIN IS UNSUCESSFUL");
getch();
goto a;
}

我不知道我应该在那个中写什么//这里是空白。所以当我使用a-=2时,它不想删除*,也不输入任何内容。

最佳答案

我稍微修改了你的代码。
在我的系统上,一个 getch() 被删除了,所以我使用 _getch() 代替它。在 printf 之后,我在下一个 _getch() 处得到了一个 '\0' 字符。所以我必须用 if (c == '\0') continue; 行忽略它。

要删除 '*' 字符,您必须打印 "\b\b"(\b 后退一个字符。' ' 覆盖 '*''\b' 再次返回)。

如果用户键入 10 个字符作为密码,您的代码中就会出现缓冲区溢出。您必须为最后一个 '\n' 字符分配 10 + 1 长度数组。

我认为您应该使用 std::string 而不是 char* 并从代码中删除未使用的变量。

希望对你有帮助。

bool login(std::string& username, std::string& password)
{
username = "";
password = "";
char c = ' ';

system("cls");
printf("\n\n\t\t\t======================================");
printf("\n\n\t\t\t| STUDENT REPORTING SCORE SYSTEM |");
printf("\n\n\t\t\t======================================");
printf("\n\n\t\t\t=========== LOGIN FIRST ============");
printf("\n\n\n\t\t\t\tENTER USERNAME : ");
std::cin >> username;
printf("\n\n\t\t\t\tENTER PASSWORD : ");

while (true)
{
c = _getch();
if (c == '\r') break;
if (c == '\0') continue;
if (c == '\b')
{
if (password.length() > 0)
{
password.pop_back();
printf("\b \b");
}
}
else
{
printf("*");
password.push_back(c);
}
}

_getch(); // Read the extra '\0'

if (username == "user" && password == "pass")
{
printf("\n\n\n\t\t\tWELCOME TO STUDENT REPORTING SCORE SYSTEM\n\t\t\t\t LOGIN IS SUCCESSFUL");
return true;
}
else
{
printf("\n\n\n\t\t\t SORRY !!!! LOGIN IS UNSUCESSFUL");
return false;
}
}

int main()
{
while (true)
{
std::string username = "";
std::string password = "";
auto successLogin = login(username, password);
if (successLogin)
break;

_getch(); // Press any key to continue...
}

return 0;
}

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

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