You're sadly mistaken if you think a while (true) loop generates more code than your goto. What do think a while (true) loop generates? Guess what, it generates a label and a goto under the covers. In other words, it's identical to what you've coded.
Now for the lecture: gotos are a very bad habit to get into. They lead to unmaintainable programs. A while loop clearly conveys to the reader that you want the code to continue (loop). A goto does NOT convey that. A goto implies you want to jump somewhere in the program. Not necessarily back to the beginning.
As a beginning programmer, it's good that you're concerned about the size of your program, but to be worried about one statement generating more code than another is a false economy. You should be much more concerned about making sure that your program executes correctly and clearly conveys it's logic to the reader.
I think people learning programming for the first time seem to like having a simple function that gives immediate feedback when you press a button, as opposed to needing to press a particular key like "Enter" with a more complicated (albeit standard) call.
But not using goto is definitely a good lesson to learn early.
______________
With regard to the original post: I cannot reproduce your issue. It lets me choose again each time, after I press a key to execute passed the getch().
The caveat here is that if you accidentally entered a non-number into lines 14, 21, or 30, then your input stream will be set to a failure state, and will no longer accept input.
a simple function that gives immediate feedback when you press a button, as opposed to needing to press a particular key like "Enter" with a more complicated (albeit standard) call.
Yep. Why can't this feature be part of the standard? Same as providing a standard for kbhit()