Циклы C++ и логические выражения

У меня есть задание по курсу Intro to Comp Sci в колледже. Нам говорят использовать только циклы и логические выражения для создания программы. Вот ссылка непосредственно на лист заданий:

http://cs.saddleback.edu/michele/Teaching/CS1A/Assignments/AS8%20-%20Boolean%20Expressions.pdf

Я заставил его работать с кучей операторов If, Then, Else, пока я снова не прочитал указания и не должен был изменить его.

У меня есть часть 'm' 'f' 'M' 'F' для работы, но я не могу настроить высоту или вес (направления № 2 и № 3) для работы.

Пожалуйста, помогите, спасибо!

PS Я новичок в программировании...

Вот что у меня есть до сих пор: `

    char gender;
    int weight;
    int height;
    bool heightOK;
    bool weightOK;

cout << "Please enter the candidate’s information (enter ‘X’ to exit).";

cout << "Gender: ";
cin.get(gender);
cin.getline(100 , '\n');

if (gender == 'm' || 'M' || 'f' || 'F')
{

}
else
{
    cout << "***** Invalid gender; please enter M or F *****";
}

cout << "Height: ";
cin >> height;

cout << "Weight: ";
cin >> weight;`

person user3011390    schedule 20.11.2013    source источник
comment
Например, если у вас есть целочисленная переменная x и вы хотите знать, находится ли она в диапазоне от 10 до 25, вы можете использовать логическое выражение, такое как (10 <= x) && (x <= 25).   -  person Michael Burr    schedule 20.11.2013
comment
Добро пожаловать в Stack Overflow! Пожалуйста, опубликуйте код, который у вас есть до сих пор. Выберите фрагмент кода и нажмите кнопку [{}] в редакторе, чтобы отформатировать код.   -  person Sergey Kalinichenko    schedule 20.11.2013
comment
Как подсказка, оператор типа if ('M') всегда будет вводиться...   -  person Cameron    schedule 20.11.2013
comment
Еще одна подсказка: C++ не английский язык. В английском языке вы можете сказать, что это род «м», «м», «ж» или «ж». В C++ вам нужно повторяться примерно так: Является ли род 'm' или является родом 'f' или является родом... Не очень хорошая английская грамматика, но ближе к тому, как думает С++.   -  person Joe Z    schedule 20.11.2013


Ответы (2)


Вы можете сделать это без операторов if. Вы должны использовать циклы do-while для каждого ввода, чтобы вы зацикливались, пока ввод недействителен. Затем вы можете установить свои логические переменные следующим образом:

heightOK = ((gender == 'm' || gender == 'M') &&
(height > MALE_TOO_SHORT && height < MALE_TOO_TALL));

heightOK = (heightOK || (/*same as above, female version*/));

Вы могли бы сделать все это в одной строке, но это трудно читать, ИМО. Вы должны быть в состоянии установить WeightOK таким же образом.

РЕДАКТИРОВАТЬ: цикл do-while запрашивает и получает ввод. Затем оператор while проверяет входные данные на достоверность.

do {
    cout << "enter gender (m/f)";
    cin  >> gender;
} while ( !(gender == 'm' || gender == 'M' || gender == 'f' || gender == 'F') );

Если вы хотите сообщить пользователю, что ввод недействителен, вы можете использовать цикл while после получения ввода в первый раз.

person user2986089    schedule 20.11.2013
comment
Что будет тестировать цикл do-while? - person user3011390; 20.11.2013

Вот выражение, показывающее, что тернарный оператор является допустимой булевой функцией по отношению к

(р д) (р р)

«(p и q) или ((не p) и r))» или «если p, то q, иначе r»

См. также: http://en.wikipedia.org/wiki/%3F:, http://en.wikipedia.org/wiki/Conditioned_disjunction

Полное раскрытие, я не читал задание. Я только что увидел в вашем посте намек на то, что вам запрещено использовать операторы «если, то еще», и подумал, что могу предложить творческий способ обмана.

person Kastor    schedule 20.11.2013