How Do You Correctly Implement a String Input Validation Loop in C++?

  • Context: Comp Sci 
  • Thread starter Thread starter Joe_K
  • Start date Start date
  • Tags Tags
    C++ Function
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
4 replies · 3K views
Joe_K
Messages
32
Reaction score
0

Homework Statement



I am writing a program which requires me to make and call a function: string Menu()

This function will display a message to the user. It will then accept the user's choice (as a string) and check it for validity - that is did the user enter a "1", "2", "3", "4", "Q", or "q"? If so, the string should be returned to the calling function (main()). If not, an error message should be displayed and the user should be given another change to make a choice - this should continue until the user enters a valid value.

Homework Equations

The Attempt at a Solution



What I am confused about is how I am supposed to take a string value from the user. Would it be correct to store this string value in a local string variable within the string Menu() function? I don't understand how I am supposed to return the string to the calling function if it is valid.

Right now, I have the function prototyped, and I have the calling statement, I just need to write the actual function code.

Would something like this be correct?

string Menu()
{
while (1)
{

if (user_value==1 || user_value==2 || user_value==3 || user_value==4 || user_value == "q" || user_value == "Q")

return user_value;
break;

else if (user_value!=1 || user_value!=2 || user_value!=3 || user_value!=4 || user_value != "q" || user_value != "Q")

count<<"invalid choice, try again: "
cin>> userValue;

}}
 
Physics news on Phys.org
why not use the string value as the loop test?

** note: this is pseudo code not C++ code:

String menu()
{
String ans=""

while(ans=="") {
ans=askUser
if(ans not valid) ans=""
}

return ans
}

notice that the loop ends when the ans != "" ie the user entered a valid string
 
Borek said:
Why not Menu(&string)?

I meant to type Menu(). To myself, Menu(string) would make more sense, but for some reason the professor told us to type it like that without any arguments. Is this most likely a mistake from her end, or is there some other way to take an argument?
 
Joe_K said:
I meant to type Menu(). To myself, Menu(string) would make more sense, but for some reason the professor told us to type it like that without any arguments.
Is this most likely a mistake from her end, or is there some other way to take an argument?
I doubt very much that this is a mistake. The program requirements are that this function takes no arguments, and returns a string entered by the user to the caller (main).

I see several things wrong with your code.
1) user_value is not declared.
2) userValue is not declared. Why do you have two variables with similar names when one would suffice?
3) your if statement is missing the braces - { } - for its body. In some limited cases you can omit the braces, but it's generally a good idea to include them, even when you don't have to. In your case, this causes a syntax error that the compiler will flag.
4) user_value is likely a string variable, yet you are comparing it to integer constants.
5) your break statement will never execute, since it comes after a return statement.