Search code examples
c++while-loopifstreamgetline

C++ File Input Stream looping issue


Working on a C++ program. Wanting to make a username "checker". Processing the ifstream in a while loop. The problem I am having is that if the user name does not exist, then it is printing the error message each time for the amount of lines in the text. I know that the problem is in the while loop. I do not know how to give the error message without checking the file for the user name. Any help would be greatly appreciated. Thanks!

string username;
string password;
int input;

bool keepGoing;
while (keepGoing){

cout<<("1.Login\n2.Create Username and Password\n3.Exit")<<endl;


cin>>input;
///////////////////////////////////////////////////////////
        if(input == 1){ //LOGIN!!!
        //open the file
        ifstream user("userinfo.txt");

    if(user.is_open()){
    //get the username
    string checkUser;
    string checkPass;
    cout<<"Enter username: "<<endl;
    cin>>checkUser;
    //create a variable to store existing username
    //Iterate throught the text file, and log them in if thier info is correct
    //while(user>>username>>password){
    while(getline(user, username)){
        //if the name is there
        if (checkUser != username){
            cout<<"Username not here!"<<endl;
        }
        if (checkUser==username){
            //cout<<"Welcome back, "<<username<<endl;
            cout<<"Password: "<<endl;
            cin>>checkPass;//get user input
                if(checkPass==password){//if the password is correct
                    cout<<"Welcome back, "<<username<<endl;//User is logged in
                    //put in the menu 2 function
                }else if(checkPass!=password){//If pass is incorrect
                    cout<<"Password incorrect."<<endl;//Denied
                }//end else if
            }//end if
    }//end while loop
   }
   else{
    cout<<"Unable to open file"<<endl;

     }
    }

Solution

  • just do it like this

    bool foundUser = false;
    while(getline(user, username)) {
    
        if(checkUser == username) {
            foundUser = true;
            break;
        }
    }
    if(foundUser) {
        // check password here
    }
    else {
        // display error message
    }