Hi there

I am writing a simple while loop which terminates on the condition that a certain value is found, as follows

std::string question = q.quest().que();
            std::string answer = q.ans().answer();
            std::string graphic = q.inf().info();
            std::string english1;
            std::string english2;
            std::string arabic1;
            std::string arabic2;
           
            
            while((answer != english1) || (answer != english2)) { 
                       random_shuffle(opt.begin(),opt.end()); 
                            english1 = opt[0].english();
                            arabic1 = opt[0].arabic();
                            english2 = opt[1].english();
                            arabic2 = opt[1].arabic();
            }

The program gets stuck in the while loop. I guess this is some sort of error in the while loops condition. If I take out the second condition and make it just based upon “English1”, then it works fine.

Any help?

Thanks in advance

english1 and english2 don't appear to be initialized. Also, in this line:

while((answer != english1) || (answer != english2))

you are comparing answer to the addresses, not the contents of the variables english1 and english2. String comparisons don't work the way integer comparisons do. Instead of using == or != you usually use the "compare" function from the string library if you want to compare the contents of strings rather than the addresses.

http://www.cplusplus.com/reference/string/string/compare.html

while((answer != english1) || (answer != english2)) {

It is guaranteed that one of the two comparisons is TRUE if english1 and english2 are not identical. Therefore the while is always TRUE.

Yup...
and you cannot use a comparison for string using '==' or '!='.

The condition for your while should be &&

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.