This is a method from a game I worked on. The method takes 6 strings, 1 representing a possible prompt, and then the others are possible responses, and returns the char selected by the user.
This method is used in my text based game to format dialogue, take a response, and return the letter answered. The method can be sent empty strings for answers which are not relevant, and will dispose of them, not allowing a user to pick them as an answer.
char converse(string statement, string responseA, string responseB, string responseC, string responseD, string responseE){ //char to be returned, representing answer. then sleeps to create pause char answer; sleep(3); //bools to represent that the letter chosen is valid bool answerB = false; bool answerC = false; bool answerD = false; bool answerE = false; //question posed cout << endl << endl << statement << endl << endl << endl; //possible responses cout << "A. " << responseA << endl; //if there are multiple possible responses, this will trigger and set the corresponding bool to true. //B if(responseB.length() > 0){ cout << "B. " << responseB << endl; answerB = true; } //C if(responseC.length() > 0){ cout << "C. " << responseC << endl; answerC = true; } //D if(responseD.length() > 0){ cout << "D. " << responseD << endl; answerD = true; } //E if(responseE.length() > 0){ cout << "E. " << responseE << endl; answerE = true; } //loop to allow user to make invalid entry while(true){ //stores user's answer in "answer" char cin >> answer; answer = tolower(answer); //swtich statement to return user's response switch(answer){ //if user answers: case 'a': return 'a'; break; //if user answers: case 'b': if(answerB == true) return 'b'; else break; //if user answers: case 'c': if(answerC == true) return 'c'; else break; //if user answers: case 'd': if(answerD == true) return 'd'; else break; //if user answers: case 'e': if(answerE == true) return 'e'; else break; //otherwise, loop again default: break; } cout << "INVALID RESPONSE. Please choose a valid response" <<span data-mce-type="bookmark" id="mce_SELREST_start" data-mce-style="overflow:hidden;line-height:0" style="overflow:hidden;line-height:0" ></span>< endl; } } </pre>