Этот код является очень хорошим кандидатом для цикла do-while
, и если вы используете его, вам не нужно инициализировать переменную answer
.
int answer; //= 0; no need to initialize!
do {
cout<<"Do you want to encrypt(enter 1) or decrypt(enter 2)?"<<endl;
cin >> answer;
}while(answer != 1 && answer != 2);
И, конечно, вам нужно использовать &&
, как уже указывали другие. : -)
Кстати, что произойдет, если пользователь введет любой нецелочисленный ввод, такой как hgjkhg
? cin>>answer
не сможет прочитать ввод, и он останется там навсегда, а флаг cin
будет установлен как сбой, и cin
не сможет прочитать дальнейший ввод. Это означает, что цикл никогда не завершится!
Чтобы избежать этого и сделать код более надежным и полным, вы должны написать его следующим образом:
int answer = 0;
while(answer != 1 && answer != 2) {
cout<<"Do you want to encrypt(enter 1) or decrypt(enter 2)?"<<endl;
if ( !(cin >> answer) )
{
cin.clear(); //clear the failure flag if there is an error when reading!
std::string garbage;
std::getline(cin, garbage); //read the garbage from the stream and throw it away
}
}
Да. Вы можете использовать цикл while
вместо do-while
. Все, что вам нужно добавить if(!(cin>>answer)) { ... }
в ваш код. : -)