Two things:
1. Yes, *** should be initialized at some point before the loop. The line where you declare it is good enough. The reason is that unlike global variables, which are automatically initialized, local variables are not. This means there's some random junk in the variable when you first declare it. Chances are it's not the characters 'm' or 'f', but you should still initialize, just in case.
2. The reason your loop isn't terminating is the clause:
Code:
*** != 'm' || *** != 'f'
If *** is 'm', then you'll get this:
false OR true -> true
If *** is 'f', then you'll get this:
true OR false -> true
See? What you actually want is for the clause to evaluate to false when *** is either 'm' or 'f'. Another way of saying that is you want the clause to evaluate to false when *** is not 'm' and not 'f'.
See if that helps.