Click here to Skip to main content
14,930,588 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Why the do..while loop in this code doesn't end when I enter password1 or password2 or password3? It keeps outputting "access denied".
C++
#include <iostream> 
using namespace std;

int main() {
    
    const string password1 = "peace"; 
    const string password2 = "war";
    const string password3 = "neutral";
    string userpassword;
    
    bool renew = ((userpassword != password1) || (userpassword != password2)|| (userpassword != password3));
    
    do {
        cout << "Enter your password > " << flush;
        cin >> userpassword;
        if (renew) {
            cout << "Access denied" << endl;
        }
    } while (renew);
    
    cout << "correct password" << endl;
    return 0;
}


What I have tried:

I have tried to declare renew in do function but it didn't work out
Posted
Updated 25-Nov-20 23:19pm

Because you're never update renew in the do block.
   
Comments
Bassel Mohamed 25-Nov-20 12:26pm
   
More clarification please
jeron1 25-Nov-20 12:28pm
   
you set renew before entering the do-while loop, never change it inside the do-while loop. You're testing something in the while statement that is unchanging.
Bassel Mohamed 25-Nov-20 12:31pm
   
can you type the correct code please?
Rick York 25-Nov-20 12:32pm
   
Can't you?
Bassel Mohamed 25-Nov-20 12:36pm
   
I obviously can't
Dave Kreskowiak 25-Nov-20 13:35pm
   
Use the debugger and step through the code line by line to watch it execute. It will teach you a lot about what your code is doing.

The debugger is there to debug YOU, not the code. It's there to change your understanding of what the code is doing.
Richard MacCutchan 25-Nov-20 13:51pm
   
You need to change the value inside the loop by comparing the entered password with whatever it is supposed to be.
When you would use the debugger you see with your own eyes, that your renew is NEVER updated in your while loop.

By the way: hard coded password in source code are very bad, because they are landing also in the executable and anybody a bit clever can see them with some binary file viewer. At top they are finely sorted from the linker in the resources block. :-O
   
Quote:
Why the do..while loop in this code doesn't end

Your code do not behave the way you expect, or you don't understand why !

There is an almost universal solution: Run your code on debugger step by step, inspect variables.
The debugger is here to show you what your code is doing and your task is to compare with what it should do.
There is no magic in the debugger, it don't know what your code is supposed to do, it don't find bugs, it just help you to by showing you what is going on. When the code don't do what is expected, you are close to a bug.
To see what your code is doing: Just set a breakpoint and see your code performing, the debugger allow you to execute lines 1 by 1 and to inspect variables as it execute.

Debugger - Wikipedia, the free encyclopedia[^]

Mastering Debugging in Visual Studio 2010 - A Beginner's Guide[^]
Basic Debugging with Visual Studio 2010 - YouTube[^]

1.11 — Debugging your program (stepping and breakpoints) | Learn C++[^]

The debugger is here to only show you what your code is doing and your task is to compare with what it should do.
   
Quote
C++
bool renew = ((userpassword != password1) || (userpassword != password2)|| (userpassword != password3));
This condition will always be true, since the three passwordN variables are different. If userpassword is equal to any one of them, it will not be equal to the others. You should be using && instead of || here.

Logical OR operator: || | Microsoft Docs[^]
Logical AND Operator: && | Microsoft Docs[^]

Also, as others have pointed out, you never update the value of the renew variable inside the loop. You initialize it once, outside of the loop, before the userpassword variable has been initialized. You need to move the test inside the loop.
   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900