It's your logic. You turn smile and frown to true when the button is pushed but never change them to false when the other button is pushed. Then you paint them both every time. So the frown, once true is always true and the smile, once true, is always true and then you paint them one after the other. I haven't run the program, I just eyeballed it. See if that's not the problem. If it isn't , come back and I'll look more closely.
You absolutely need a different loop if you want to repeatedly ask for an entry until you get one that is found. You can't do it with the one you currently have as that just loops over the lines in the file and for each user entry you need to repeat this process.
Or are you saying I should create another while loop just to check if the user input is available?