首页 > 解决方案 > 错误在哪里?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;
        }
    }
}

标签: c++arrayspasswords

解决方案


你的代码给你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;
        }
    }
}

推荐阅读