Вот что должно произойти: после запроса пользователя: «Вы хотите ввести другое имя?» если пользователь вводит «Y», им должно быть предложено добавить другое имя. Вместо этого программа запускает цикл, который начинается после cin < < Ответ, который, как я думал, я установил условие только для запуска, если пользователь не вводит «Y», «y», «N» или «n». На самом деле программа, похоже, делает противоположное тому, что я хочу, независимо от того, как пользователь отвечает на этот вопрос.Почему моя петля действует противоположно тому, как она должна быть основана на пользовательском вводе?
#include <iostream>
#include <cstring>
using namespace std;
int main(){
const int MAX_NUM = 101;
char name[MAX_NUM];
char response;
char nameCorrect = 'n';
double total = 0;
do{
do{
cout << "Please enter name: ";
cin >> name;
cin.ignore(100, '\n');
cout << "It looks like you entered " << name
<< ". Is this correct? (Y/N) " << endl;
cin >> nameCorrect;
while (nameCorrect != 'y' & nameCorrect != 'Y' & nameCorrect != 'n' & nameCorrect != 'N')
{
cin.clear();
cin.ignore(200, '\n');
cout << '\n' << "If " << name <<
" is what you are trying to enter, "
<< "please enter Y." << '\n'
<< "If " << name << " is not correct, plese enter N."
<< '\n' << "(Y/N): ";
cin >> nameCorrect;
}
} while (nameCorrect == 'n' || nameCorrect == 'N');
cout << "Would you like to enter another name? (Y/N) ";
cin >> response;
if (response != 'y' & response != 'Y' & response != 'n' & response != 'N');
{
cin.clear();
cin.ignore(200, '\n');
cout << '\n' << "If you would like to enter another name Y."
<< '\n' << "If you are finished, please enter N. " << '\n' << "(Y/N): ";
cin >> response;
}
} while (response == 'y' || response == 'Y');
return 0;
}
Используйте && вместо этого в своем цикле while. –
, в то время как '&&' является более четким и позволяет короткое замыкание - он должен работать по желанию, так как bools преобразуются в 1 или 0. –