Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
CodeSeeker
0 / 0 / 0
Регистрация: 31.10.2017
Сообщений: 37
Завершенные тесты: 1
1

"ИЛИ" работает как "И"

10.11.2017, 13:57. Просмотров 696. Ответов 7
Метки нет (Все метки)

Пишу программу которая читает слова по одному за раз пока не будет введена отдельная буква q. И сколько я тут не бился словно рыба об лед, но пока в выражении ниже не поменял И на ИЛИ ничего не получилось. Помогите понять почему у меня ИЛИ ведет себя словно И.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
int main(){
    char str[30];
    cout << "Vvedi stroku: ";
        cin.getline(str,30);
    while (str[0] != 'q' || str[1] != '\0'){   //Условие при котором будет осуществлен
        cout << "Vvedi sroku: ";           // выход из цикла
        cin.getline(str,30);
    }
           return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2017, 13:57
Ответы с готовыми решениями:

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов), которые разделяются...

Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел
Вставить пробел после каждого символа &quot;.&quot; &quot;,&quot; &quot;!&quot; или &quot;?&quot;, если за этими символами не следует...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую классы: − воин; −...

Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков "+", "-", "*".
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой...

7
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
10.11.2017, 14:01 2
Что именно ты вводишь?

Добавлено через 1 минуту
Общее НЕ тогда:
C++
1
while (!(str[0] == 'q' && str[1] == '\0'))
0
TRam_
зомбяк
711 / 668 / 211
Регистрация: 14.05.2017
Сообщений: 2,310
10.11.2017, 14:07 3
Цитата Сообщение от CodeSeeker Посмотреть сообщение
у меня ИЛИ ведет себя словно И
потому что если работаешь с условиями "нет", то ИЛИ для них работает именно так, как И для условий "да". И наоборот.
0
no swear
166 / 144 / 76
Регистрация: 01.07.2016
Сообщений: 798
Завершенные тесты: 1
10.11.2017, 14:08 4
Ну вот смотри, стоит у тебя "и" и ты ввел qwe. Первое условие не выполняется (т е вот это - str[0] != 'q') а второе выполняется (т е вот это - str[1] != '\0'), а сам "и" так устроен что оба условия должны быть правдой поэтому он выходит из цикла. Если поставить "или" то что бы выйти из цикла оба условия должны не выполнятся
0
CodeSeeker
0 / 0 / 0
Регистрация: 31.10.2017
Сообщений: 37
Завершенные тесты: 1
10.11.2017, 14:15  [ТС] 5
no swear, вот я и имею ввиду, что чтобы выйти из цикла должны выполниться оба, соответственно там должны стоять две &&, а стоят два ||. Вот например ввожу я просто 'q', и получается что первый элемент массива это q, а второй \0 - вот тут то и должен произойти выход из массива, т.е. оба условия выполниться должны.
0
ValeryS
Модератор
7265 / 5519 / 692
Регистрация: 14.02.2011
Сообщений: 18,701
10.11.2017, 14:18 6
Цитата Сообщение от CodeSeeker Посмотреть сообщение
C++
1
2
while (str[0] != 'q' || str[1] != '\0'){  //Условие при котором будет осуществлен
     cout << "Vvedi sroku: ";// выход из цикла
вообще то в скобках условия выполнения цикла, а не выхода из него
вызываем единичное q
str[0] != 'q' ЛОЖЬ str[1] != '\0' ЛОЖЬ, ЛОЖЬ + ЛОЖЬ =ЛОЖЬ цикл не выполняется
если нужно с И то используется правила Моргана
C++
1
while (!(str[0] == 'q'&&str[1] == '\0'))
0
TRam_
зомбяк
711 / 668 / 211
Регистрация: 14.05.2017
Сообщений: 2,310
10.11.2017, 14:24 7
Выражение
C++
1
while (str[0] != 'q' || str[1] != '\0')
значит "продолжать ввод строк, пока в первом символе любой символ кроме q, или же второй символ - любой кроме конца строки". Если же заменить "или же" на "и", то при символе конца строки получится "символ не q и любой кроме конца строки не выполнился = нет".
0
no swear
166 / 144 / 76
Регистрация: 01.07.2016
Сообщений: 798
Завершенные тесты: 1
10.11.2017, 14:24 8
Лучший ответ Сообщение было отмечено CodeSeeker как решение

Решение

C++
1
2
3
4
5
        while (str[0] != 'q' && str[1] != '\0')
    {   
        cout << "Vvedi stroku: ";
        cin.getline(str, 30);
    }
CodeSeeker, Повторюсь, вводим qwe и смотрим на условия While. Видим что первое условие цикла(str[0] != 'q' - на самом деле он равен q) не выполняется а второе(str[1] != '\0' - это не конец строки) выполняется, а "и" так устроен что оба условия должны выполнится, не важно while, if или do while, так как одно условие не выполняется(является ложью) то произойдёт выход из цикла
Поэтому "или" ставь. При или оба условия должны не выполниться
0
10.11.2017, 14:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2017, 14:24

Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье"
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из...

Определить, какая из точек "В" или "С" расположены ближе к точке "А".
На оси Ох расположены 3 точки А, В и С. Определить, какая из точек &quot;В&quot; или &quot;С&quot; расположены ближе к...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru