简体   繁体   English

请帮助我的源代码 C++

[英]Please help me with my source code c++

When I input username and password and the output the program is:当我输入用户名和密码并且输出程序是:

Wrong Password!!!Wrong Password!!!Wrong Password!!!Wrong Password!!!Wrong Password!!!Wrong Password!!!密码错误!!!密码错误!!!密码错误!!!密码错误!!!密码错误!!!密码错误!!!

#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string.h>

typedef struct data{

char user[50], pass[50];

} data;

using namespace std;

int main(){

    ifstream fi;
    ofstream fo;

    data log;

    char finduser[50];
    char findpass[50];

    string regis= "";
    cout << "registered?[Yes/No]";
    cin >> regis;

    if(regis == "No"){

        cout << "Register Panel";
        fo.open("log.txt", ios::binary | ios::app);

        cout << "\nUsername: ";cin >> log.user;
        cout << "Password: ";cin >> log.pass;

        fo.write((char *) &log, sizeof(log));
        fo.close();
        goto login;

    }else{

        login:
        cout << "\nLogin Panel";
        cout << "\nUsername: ";

        cin >> finduser;
        cout << "Password: ";
        cin >> findpass;
        fi.open("log.txt", ios::binary);

        while(fi.read((char *) &log, sizeof(log))){

            if(strcmp(log.user, finduser) == 0 && (strcmp(log.pass,findpass) == 0)){
                cout << "\nLogin Succes";
            }else{
                cout << "Wrong Password!!!";
            }
        }
        fi.close();
    }   
    getchar();
    return 0;
}

What are the problems of my C ++ code ?我的 C++ 代码有什么问题?

I have tried many different ways but still get an error:我尝试了很多不同的方法,但仍然出现错误:

registered?[Yes/No]No
Register Panel
Username: aaa
Password: aaa

Login Panel
Username: aaa
Password: aaa
Wrong Password!!!Wrong Password!!!Wrong Password!!!Wrong Password!!!Wrong Password!!!Wrong Password!!!
Login Succes

------------------
(program exited with code: 0)
Press return to continue

You are checking multiple line from log.txt.您正在检查 log.txt 中的多行。 And printing Wrong Password for each line for mismatch.并为不匹配的每一行打印Wrong Password

You should do like this:你应该这样做:

bool success = false;

while(fi.read((char *) &log, sizeof(log)))
{
    if(strcmp(log.user, finduser) == 0 && (strcmp(log.pass,findpass) == 0))
    {
        cout << "\nLogin Succes";
        success = true;
        break;
    }
}
fi.close();

if(!success)
{
   cout<<"Wrong Password!!!";
}

You need to check your whole file to match.您需要检查整个文件以匹配。 And show output one time.并显示输出一次。

Hope this will help希望这会有所帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM