Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не срабатывает условие в программе 
V
    Опции темы
limelight
Дата 28.2.2010, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 19.10.2009

Репутация: нет
Всего: нет



Есть вот такой код:
Код


#include <iostream>
using namespace std;
int main()
{
    char uslovie;
    do{
         cout<<"Prodoljit'?(y/n)";cin>>uslovie;
    }while ((uslovie=='y')||(uslovie=='Y'));
    cin.get();
    cin.get();
    return 0;
}



Он работает как и полагается, но следует изменить условие по другому(но чтобы осталась та же функциональность) как программа работать перестает. следовательно ошибка появляется в условии, но в чем именно, где? Взгляните:

Код

#include <iostream>
using namespace std;
int main()
{
    char uslovie;
    do{
         cout<<"Prodoljit'?(y/n)";cin>>uslovie;
    }while ((uslovie!='n')||(uslovie!='N'));
    cin.get();
    cin.get();
    return 0;
}


В этом случае уже выйти из программы не получается. В чем дело?


Это сообщение отредактировал(а) limelight - 28.2.2010, 13:01
PM MAIL ICQ   Вверх
RatHat
Дата 28.2.2010, 13:57 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: нет
Всего: 1



Потому что у тебя так или иначе выражение будет возвращать true. Тебе надо не "ИЛИ" ставить, а "И":

Код

#include <iostream>
using namespace std;
int main()
{
    char uslovie;
    do{
         cout<<"Prodoljit'?(y/n)";cin>>uslovie;
    }while ((uslovie!='n')&&(uslovie!='N'));
    cin.get();
    cin.get();
    return 0;
}

--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
limelight
Дата 28.2.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 19.10.2009

Репутация: нет
Всего: нет



Как же "и" если мне надо либо то либо другое???
не одновременное срабатывание 'n' и 'N' а именно либо первое либо второе.хм...
PM MAIL ICQ   Вверх
mes
Дата 28.2.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(limelight @  28.2.2010,  13:24 Найти цитируемый пост)
Как же "и" если мне надо либо то либо другое???

ну назовите тогда символ (или несколько) который НЕ удовлетворяет Вашему условию :
не равен 'n' или не равен 'N' 
smile


--------------------
PM MAIL WWW   Вверх
Christoph
Дата 28.2.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: нет
Всего: 11



A    B    F
0    0    0
0    1    0
1    0    0
1    1    1

логическое и, цикл выполняется когда два выражение true если одно false цикл закончится


--------------------
user posted image
PM MAIL ICQ   Вверх
limelight
Дата 28.2.2010, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 19.10.2009

Репутация: нет
Всего: нет



Хорошо. чтобы Выйти из цикла do while надо чтобы условие было false
Условие ((uslovie!='n')&&(uslovie!='N')) возвращает false во всех случаях кроме когда истинно каждое из подусловий по отдельности, а так же вместе, значит нас устраивает 3 варианта:
1)(uslovie!='n') = false
2)(uslovie!='N') = false
3)(uslovie!='n') = false и (uslovie!='N') = false

Например ввели 'n' , тогда uslovie='n'; (uslovie!='n')=false; (uslovie!='N')=true =>все условие ((uslovie!='n')&&(uslovie!='N'))=false и программа завершится.
Введем другой символ, например 'y':  (uslovie!='n')=true; (uslovie!='N')=true=> все условие у нас true и программа работает дальше...

Черт, сам себе доказал!)
Хм, неужели все время придется вот так все условия разбирать?)))
Неужели нельзя как то проще написать?)

Например вот так...}while (!((uslovie=='n')||(uslovie=='N')));

Как здесь правильно написать и как бы написали вы?
PM MAIL ICQ   Вверх
mes
Дата 28.2.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(limelight @  28.2.2010,  14:07 Найти цитируемый пост)
Хм, неужели все время придется вот так все условия разбирать?)))

нет, немного тренировки и будут писаться автоматически smile

Цитата(limelight @  28.2.2010,  14:07 Найти цитируемый пост)
Например вот так...}while (!((uslovie=='n')||(uslovie=='N')));

вспомните правило минуса при раскрытии скобок: знак каждого числа меняется на противоположный,
тут тоже самое :
Код

!((uslovie == 'n')||(uslovie == 'N'))
   uslovie != 'n' && uslovie != 'N';


Это сообщение отредактировал(а) mes - 28.2.2010, 18:33


--------------------
PM MAIL WWW   Вверх
limelight
Дата 28.2.2010, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 19.10.2009

Репутация: нет
Всего: нет



Цитата(mes @ 28.2.2010,  15:20)

вспомните правило минуса при раскрытии скобок: знак каждого числа меняется на противоположный,
тут тоже самое :
Код

!((uslovie == 'n')||(uslovie == 'N'))
   uslovie != 'n'  | uslovie != 'N';

то есть как я понимаю по вашему выходит 

!((uslovie == 'n')||(uslovie == 'N'))  это все равно что uslovie != 'n'  || uslovie != 'N'   ?

в чем тогда разница между вашим uslovie != 'n'  || uslovie != 'N'  и моим(ошибочным, указанном в самом начале обсуждения) 
}while ((uslovie!='n')||(uslovie!='N'))

???
PM MAIL ICQ   Вверх
mes
Дата 28.2.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(limelight @  28.2.2010,  17:29 Найти цитируемый пост)
в чем тогда разница между вашим uslovie != 'n'  || uslovie != 'N'

там опечатка, исправил smile 
"противоположное по знаку"  для || есть &&


--------------------
PM MAIL WWW   Вверх
limelight
Дата 28.2.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 19.10.2009

Репутация: нет
Всего: нет



Спасибо!)
PM MAIL ICQ   Вверх
bsa
Дата 1.3.2010, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
limelight, если ответ на вопрос получен, то пометь тему решенной

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.6871 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.