So usually my do while menus will have a basic condition where if the user doesn't enter 'n' for NO, the menu will loop back
The problem I have is, if the user enters anything other than 'n', the menu will loop back, but I want the user to specifically enter only 'y' to reloop, and if the user enters anything else it will say "invalid choice"
Is the only option to do this is create a lenghty }while (... ) condition which deals with every single choice?
If it's a yes/ no question, just use an if statement. Stick to a single char answer, use std::tolower, don't worry about checking validity of a no answer.
In a while loop, use the results of the yes/no question with bool variable in the condition of the while.
I am not a fan of do loops - they can be error prone. Just because they always execute once should not be a primary reason for choosing them over a while loop. All 3 loop constructs can be converted form 1 to another, maybe at the price of an extra variable.