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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
iNsomNia7
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 32
#1

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

22.03.2013, 02:04. Просмотров 489. Ответов 7
Метки нет (Все метки)

Напишите программу, которая циклически будет запрашивать ввод пользователем двух денежных сумм, выраженных в фунтах, шиллингах, пенсах. Программа должна складывать введенные суммы и выводить на экран результат, такжк выраженный в фунтах, шиллингах и пенсах. После каждой итерации программа должна спрашивать пользователя, желает ли он продолжить работу программы. При этом рекомендуется использовать цикл 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++
Здравствуйте . Нужно придумать задачу на массивы с использованием логической операции &quot;И&quot; (AND) Я не могу понять , какую задачу можно...

Ошибка в перегрузке операции - C++
Здравствуйте, помогите пожалуйста исправить ошибка: выражение слева от &quot;.summa&quot; должно представлять класс, структуру или объединение ...

ошибка с перегрузкой операции - C++
Долго сижу и никак не могу понять в чём ошибка. Вот 3 файла. Они подключены правильно и работают. #include &lt;iostream&gt; #include...

Ошибка при перегрузки операции << - C++
Здравствуйте, есть задача - создать класс mstring который будет включать в себя массив символов, который можно выводить с помощью &quot;cout&lt;&lt;&quot;....

Ошибка в операции разность множеств - C++
Нужно получить разность множества всех целых чисел от 0 до m (m вводим с клавиатуры) и множества целых чисел, которое мы вводим с...

Ошибка: нет операции доступа к элементу - C++
#include&lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;fstream&gt; #include&lt;locale&gt; using namespace std; struct PRICE { char...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
22.03.2013, 02:22     Ошибка в логической операции #5
так одно и будет всегда удовлетворять. Либо неравенство 'у' выполнится, а если введут символ равный именно 'y', то неравенство 'n' выполнится!
sannee
Просто хороший человек
363 / 156 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 3
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++
Подскажите в чем ошибка. Компилятор говорит что нет перегруженной бинарной операции + для такого типа (41 строка) #include &lt;iostream&gt; ...

Операции с массивами (есть логическая ошибка, не пойму где) - C++
Программа компилируется нормально. Спрашивает кол-во элементов массива. Вводятся элементы массива Считает сумму от первого до...

Переопределение операции. Ошибка Error LNK2019: ссылка на неразрешенный внешний символ - C++
Возникает такая ошибка: 1 error LNK2019: ссылка на неразрешенный внешний символ &quot;public: class three __thiscall three::operator=(class...

Перегрузить операции сравнения комплексных чисел и операции потокового вывода - C++
Создать класс комплексное число. Перегрузить операции сравнения комплексных чисел! =, ==,&gt;, &lt;,&gt; =, &lt;= И операции потокового ввода-вывода. ...


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

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

Не по теме:

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

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

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