Click here to Skip to main content
15,887,266 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.
 
Share this answer
 
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
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
 
Share this answer
 
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.
 
Share this answer
 
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.
 
Share this answer
 

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