c++ - 错误在哪里?C++ 中的密码输入代码
问题描述
我是初学者。这个简单的密码代码执行后,即使输入正确的密码也一直显示无效。有谁可以帮助我吗?
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
string username;
int password[4]={0},i,realname[4]={1,2,4,8},j,temp=0;
for(j=0;j<3;j++)
{
cout<<"\nUsername: ";
cin>>username;
if(username=="admin")
{
temp++;
}
cout<<"\nPassword: ";
for (i = 0; i < 4;i++)
{
password[i]=getch();
cout<<"*";
if(password[i]==realname[i])
{
temp++;
}
}
if(temp==5)
{
cout<<"Login Success!";
break;
}
else
{
cout<<"\nInvalid username or password.";
j=0;
}
}
}
解决方案
你的代码给你Invalid username or password
它是因为循环temp
内的值永远不会更新。for
该行if(password[i]==realname[i])
正在评估,false
因为它试图将用户输入的 ascii 表示形式进行比较,它们是¨[49, 50, 51, 52] 和 realname[1, 2, 4, 8] 数组。您必须将用户输入转换为int
或设置密码和实名char
类型。
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
string username;
int i, j, temp=0;
char realname[4]={'1', '2', '4', '8'};
char password[4] = {'0'};
for(j=0;j<3;j++)
{
cout<<"\nUsername: ";
cin>>username;
if(username=="admin"){
temp++;
}
cout<<"\nPassword: ";
for (i = 0; i < 4;i++)
{
password[i]=static_cast<char>(getch());
cout<<"*";
if(password[i]==realname[i])
{
temp++;
}
}
std::cout<< "\n";
if(temp == 5)
{
cout<<"Login Success!\n";
break;
}
else
{
cout<<"\nInvalid username or password\n.";
j=0;
}
}
}
推荐阅读
- python - 如何获得每月分布函数的积分?
- r - 有没有办法将列中的整数转换为 R 中的字符?
- node.js - 如何将环境变量注入在 sam local 下运行的 Lambda?
- analysis - 如何分析海量数据?
- android - 在jetpack compose中手动刷新分页数据
- reactjs - React-router v6 使用 useNavigate 发送参数
- android - Facebook 和 Google 登录在 .aab 发布版本中不起作用。但它工作正常以 .apk 格式创建发布版本
- javascript - HTML 验证适用于 codepen,但不适用于我的笔记本电脑或 IIS
- python - ParserError:错误标记数据。C 错误:字符串中的 EOF 从第 110994 行开始 1
- mongodb - 如何根据mongoDB中的过滤器更新对象的属性