Чёто не понимаю (while)

Может конечно я переработал но не понимаю в чем проблема? Думал сначала в типах char нельзя использовать && (и), || (или), пробовал с int тоже самое выходит. Может я что то не понимаю в функции while. Изменил условие наоборот на == вместо != , цикл сразу завершается как и должно быть , если убираю && или || , и оставляю одно условие, все работает как должно быть. Помогите пожалуйста понять в чем же дело, может перетрудился или что то не догоняю?

#include <iostream>

using namespace std;

int main(){

    char Data = '0';

    while ( (Data != 'Y') || (Data != 'N') ){    // продолжать цикл, пока а не будет или Y или N
        cout << "Choice (Y/N): ";
        cin >> Data;
        cout << Data << endl;
    }
    cout << "finish " << Data << endl;

    return 0;
}

(Data != 'Y') || (Data != 'N')

Чтобы выйти из цикла, Data должен быть одновременно равен 'Y' и 'N'.

MasterOfAlteran,
а разве это не знак || или? Тогда в чем я ошибся создав такое условие? И тогда как писать такие условия? У меня даже идей нет на этот счет, только если по 1му делать кучу циклов и условий?

а разве это не знак || или?

Оно самое. Дает true, если хотя бы один из операндов равен true.
Пусть пользователь ввел 'Z'. Считаем:
(Data != 'Y') || (Data != 'N') == (true) || (true) == true
Пусть пользователь ввел 'Y'. Считаем:
(Data != 'Y') || (Data != 'N') == (false) || (true) == true
Пусть пользователь ввел 'N'. Считаем:
(Data != 'Y') || (Data != 'N') == (true) || (false) == true

И тогда как писать такие условия?

Нужно изучить таблицы истиности и набить руку в этих делах. Через какое-то время всё станет прозрачно.


У меня даже идей нет на этот счет

!((Data == 'Y') || (Data == 'N'))

Пусть пользователь ввел 'Z'. Считаем:
!((Data == 'Y') || (Data == 'N')) == !(false || false) == true
Пусть пользователь ввел 'Y'. Считаем:
!((Data == 'Y') || (Data == 'N')) == !(true || false) == false
Пусть пользователь ввел 'N'. Считаем:
!((Data == 'Y') || (Data == 'N')) == !(false || true) == false


(Data != 'Y') && (Data != 'N')
Пусть пользователь ввел 'Z'. Считаем:
(Data != 'Y') && (Data != 'N') == (true) && (true) == true
Пусть пользователь ввел 'Y'. Считаем:
(Data != 'Y') && (Data != 'N') == (false) && (true) == false
Пусть пользователь ввел 'N'. Считаем:
(Data != 'Y') && (Data != 'N') == (true) && (false) == false

MasterOfAlteran,
спасибо. Вроде понял, попробую потестировать разные варианты чтобы полностью понять логику.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

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

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.