Форум программистов, компьютерный форум CyberForum.ru

Ошибка в логической операции - C++

Восстановить пароль Регистрация
 
iNsomNia7
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 32
22.03.2013, 02:04     Ошибка в логической операции #1
Напишите программу, которая циклически будет запрашивать ввод пользователем двух денежных сумм, выраженных в фунтах, шиллингах, пенсах. Программа должна складывать введенные суммы и выводить на экран результат, такжк выраженный в фунтах, шиллингах и пенсах. После каждой итерации программа должна спрашивать пользователя, желает ли он продолжить работу программы. При этом рекомендуется использовать цикл do. Естественной формой взаимодействия программы с пользователем была бы следующая:

Введите первую сумму: 5 10 6
Введите вторую сумму: 3 2 6
Всего 8 13 0
Продолжить(y/n)?



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//8.cpp
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    char dir = 'a';
    while(dir != 'n')
    {
        unsigned int pounds1, pounds2, shil1, shil2, peni1, peni2;
        cout << "Enter the first sum: ";
        cin >> pounds1 >> shil1 >> peni1;
        cout << "Enter the second sum: ";
        cin >> pounds2 >> shil2 >> peni2;
        unsigned int pp = peni1 + peni2;
        unsigned int ss = shil1 + shil2;
        unsigned int popo = pounds1 + pounds2;
        if(pp > 11)
        {
 
            pp = pp - 12;
            ++ss;
        }
        if(ss > 19)
        {
            ss = ss - 20;
            ++popo;
        }
        cout << "Result is: " << popo << ' ' << ss << ' ' << pp << endl;
        do
        {
            cout  << "Continue?(y/n) ";
            dir = getche();
            cout << endl;
        }
        while(dir != 'n' || dir != 'y');
    }
 
    system("pause");
    return 0;
}

Проблема в

C++
1
2
3
4
5
6
7
do
        {
            cout  << "Continue?(y/n) ";
            dir = getche();
            cout << endl;
        }
        while(dir != 'n' || dir != 'y');
По идее должен либо заново выполнять программу при нажатии 'y' или же завершать работу при нажатии 'n', но ни того, ни другого не происходит. Пробовал задавать лишь одно условие while(dir != 'n'), все работало нормально...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2013, 02:04     Ошибка в логической операции
Посмотрите здесь:

C++ Операции с массивами (есть логическая ошибка, не пойму где)
ошибка с перегрузкой операции C++
Вызов логической функции C++
C++ Ошибка: нет операции доступа к элементу
Придумать задачу на массивы с использованием логической операции "И" C++
Битовые операции и операции смещения языка С C++
C++ Переопределение операции. Ошибка Error LNK2019: ссылка на неразрешенный внешний символ
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12283 / 6970 / 784
Регистрация: 27.09.2012
Сообщений: 17,282
Записей в блоге: 2
Завершенные тесты: 1
22.03.2013, 02:13     Ошибка в логической операции #2
Цитата Сообщение от iNsomNia7 Посмотреть сообщение
По идее должен либо заново выполнять программу при нажатии 'y' или же завершать работу при нажатии 'n', но ни того, ни другого не происходит.
с чего вдруг? Вдумайтесь в условие:
C++
1
dir != 'n' || dir != 'y'
Добавлено через 1 минуту
чтобы оно стало false, необходимо чтобы dir был равен 'n' и 'y' одновременно

Добавлено через 2 минуты
Поставьте, например
C++
1
while(dir == 'y')
iNsomNia7
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 32
22.03.2013, 02:18  [ТС]     Ошибка в логической операции #3
Пока dir не равен либо 'n', либо 'y'.

Я делаю это на случай, если будет введен неверный символ, т.е. если на вопрос Continue?(y/n) будет ответ, к примеру, 'f', то программа должна переспросить.

Добавлено через 4 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение

Добавлено через 1 минуту
чтобы оно стало false, необходимо чтобы dir был равен 'n' и 'y' одновременно
Поясните, как тогда работает операция логического или ||? Ведь одно из двух условий должно удовлетворять, а не оба одновременно
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12283 / 6970 / 784
Регистрация: 27.09.2012
Сообщений: 17,282
Записей в блоге: 2
Завершенные тесты: 1
22.03.2013, 02:21     Ошибка в логической операции #4
Цитата Сообщение от iNsomNia7 Посмотреть сообщение
Пока dir не равен либо 'n', либо 'y'.
ok, ok!
ввел я 'z' - считаем:
'z'!='n' || 'z'!='y'
true || true
Результат: true

Ввел я 'n':
'n'!='n' || 'n'!='y'
false || true
Результат: true

Ввел я 'y':
'y'!='n' || 'y'!='y'
true || false
Результат: true

Добавлено через 1 минуту
Цитата Сообщение от iNsomNia7 Посмотреть сообщение
логического или
10
111
010
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
22.03.2013, 02:22     Ошибка в логической операции #5
так одно и будет всегда удовлетворять. Либо неравенство 'у' выполнится, а если введут символ равный именно 'y', то неравенство 'n' выполнится!
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
22.03.2013, 02:25     Ошибка в логической операции #6
у вас цикл будет прдолжать выполнять итерации до тех пор пока вы не введете символ который не равный 'y' или не равный 'n', а при нажатии любого из этих символов он выходит из цикла.
iNsomNia7
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 32
22.03.2013, 02:36  [ТС]     Ошибка в логической операции #7
Боже, дурак полный

Просто нужно было использовать не ||, а &&.

Спасибо, за быстрый отклик.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2013, 02:47     Ошибка в логической операции
Еще ссылки по теме:

C++ Ошибка компиляции: нет перегруженной бинарной операции +.
Перегрузить операции сравнения комплексных чисел и операции потокового вывода C++
C++ Ошибка в перегрузке операции
C++ Ошибка при перегрузки операции <<
C++ Синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"

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

Или воспользуйтесь поиском по форуму:
sannee
22.03.2013, 02:47     Ошибка в логической операции
  #8

Не по теме:

я идиот, вот что значит перепрограмировать... уже начинаю советы неправильные давать... эх... прошу модераторов удалить мой глупый пост, почему то не заметил что у него не &&, а ||

Yandex
Объявления
22.03.2013, 02:47     Ошибка в логической операции
Ответ Создать тему
Опции темы

Текущее время: 12:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru