So essentially, I am asking the user for a departure time, as well as if it is in the AM or PM. In the code provided, I only test for AM/am (caps or lowercase), but in my actual program I will be testing for both AM/am and PM/pm. Now, when I set my do/while loop up like this:
do {
cout << "Please Enter a Valid Period: ";
cin >> departure_amOrPM;
} while (departure_amOrPM != "AM");
it works just fine, and it lets the program continue when "AM" is entered in all caps. But when I add another test to my loop like this:
do {
cout << "Please Enter a Valid Period: ";
cin >> departure_amOrPM;
} while (departure_amOrPM != "AM" || departure_amOrPM != "am");
it does not work. I tried entering both "AM" and "am", yet it did not let me continue. I don't know how to overcome this obstacle, so any help or tips would be much appreciated. Thanks!
CodePudding user response:
while
means to continue looping while the condition is true
. You'd like to loop as long as it's neither "AM" _nor "am".
You can write it as:
while (departure_amOrPM != "AM" && departure_amOrPM != "am");
CodePudding user response:
Think about this condition
} while (departure_amOrPM != "AM" || departure_amOrPM != "am");
This condition is true of every string. Every string is either not equal to "AM" or not equal to "am" (most strings are not equal to both). That's why you couldn't proceed.
What you meant to write is this
} while (departure_amOrPM != "AM" && departure_amOrPM != "am");
It's very common to get &&
and ||
confused, especially when also dealing with negation.
CodePudding user response:
Instead of using the logical OR operator in the condition or the do-while loop
do {
cout << "Please Enter a Valid Period: ";
cin >> departure_amOrPM;
} while (departure_amOrPM != "AM" || departure_amOrPM != "am");
Use the logical AND operator like
do {
cout << "Please Enter a Valid Period: ";
cin >> departure_amOrPM;
} while (departure_amOrPM != "AM" && departure_amOrPM != "am");
To test yourself at first write a condition to which the valid input satisfies. For your code it will look like
(departure_amOrPM == "AM" || departure_amOrPM == "am")
Now make its negation like
!(departure_amOrPM == "AM" || departure_amOrPM == "am")
or
not(departure_amOrPM == "AM" || departure_amOrPM == "am")
As for example
do {
cout << "Please Enter a Valid Period: ";
cin >> departure_amOrPM;
} while ( not (departure_amOrPM == "AM" || departure_amOrPM == "am") );
Now you can rewrite it using the mathematical logic like
do {
cout << "Please Enter a Valid Period: ";
cin >> departure_amOrPM;
} while (departure_amOrPM != "AM" && departure_amOrPM != "am");