Я, должно быть, что-то пропустил. Я делаю упражнение, чтобы узнать C++ и спрашивает, что если пользователь вводит либо с, р, т или г символы затем продолжать, в противном случае повторного запроса строку, поэтому я написал это:условное выражение во время цикла
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main(void){
cout << "Please enter one of the following choices:" << endl;
cout << "c) carnivore\t\t\tp) pianist\n";
cout << "t) tree\t\t\t\tg) game\n";
char ch;
do{
cout << "Please enter a c, p, t, or g: ";
cin >> ch;
cout << "\"" << ch << "\"" << endl;
}while(ch != 'c' || ch != 'p' || ch != 't' || ch != 'g');
cout << "End" << endl;
cin.clear();
cin.ignore();
cin.get();
return 0;
}
Это делает не работает, и все, что я получаю, - это запрос, повторно запрашивающий его даже при нажатии любого из правильных символов.
Однако если изменить эту строку:
while(ch != 'c' || ch != 'p' || ch != 't' || ch != 'g');
к
while(ch != 'c' && ch != 'p' && ch != 't' && ch != 'g');
почему? Я понимаю, что оператор «OR» должен работать как один из тестов.
The OR "рабочие" средства цикл вычисляет значение true, заставляя его снова зацикливаться. – chris
Вы можете сконденсировать этот цикл, просто используя цикл while: http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.3 – chris