Обращая всю свою логику, используя '!', Вы поступили правильно, изменив условные операторы "==" на "! =", Но забыли поменять местами логические операторы "||" на "&&". Таким образом, это должно быть правильно:
while (ch!='q' && ch!='Q');
Я использую C #, поэтому, хотя приведенный выше код будет работать, я бы использовал это вместо этого, так как его легче читать:
while (ch.ToUpper() != 'Q');