>> while (!(cin >> hold)

The operator>> returns the stream which evaluates to true if the stream is in a good state and false if it is in a bad state. So if the read fails, it will evaluate to false. If the read succeeds, it will evaluate to true and the loop won't run any more (unless the other conditions after the or are met). This rarely matters if hold is a char because anything typed by the user is a character and so it shouldn't fail very often. If you were reading into an int or double, and the user typed a charcter like 'a', then the read would fail and that code would trigger the loop to run and display the error message.

>> Hi, the program seems to go into a loop if the user enters a sentence even with that code I guess its because its a char variable I have to store it in.

I don't understand this, maybe you could post your latest code and the example input.