Sorry if I fail to be clear enough or make any mistakes, this is my first time posting.
My code runs without errors when complied but the first while loop (in in
Ad Ed Heal mentioned, the issue here is cin
's failbit. When you do cin >> choice
, and the user types "a", then the conversion to int
fails. This sets cin
's failbit, making all future reads from it fail until the failbit is cleared. So the next time you reach cin >> choice
, the user won't even get to type anything.
You can use cin.clear()
to restore to working order.
To do this a bit more robustly, you could do something like
while(true)
{
cout >> "Enter choice [1-4]: ";
if(!(cin >> choice))
{
cout << "Input must be an integer.\n";
cin.clear();
continue;
}
do_stuff_with_choice();
}
I am a newbie to programming in general, but playing with your code and looking up stuff made me find some sort of solution.
The cin.clear
only clears the error log of the input, and I believe that it still retains the value of the letter.
What you should add right after is a cin.ignore(#,'\n')
(# being a very, very large number) to have it avoid the line and skip right through it.
Found the solution in another question that explains the use of both cin commands.