Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
2 / 2 / 1
Регистрация: 19.11.2012
Сообщений: 32

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

22.03.2013, 02:04. Показов 2944. Ответов 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'), все работало нормально...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2013, 02:04
Ответы с готовыми решениями:

Придумать задачу на массивы с использованием логической операции "И"
Здравствуйте . Нужно придумать задачу на массивы с использованием логической операции &quot;И&quot; (AND) Я не могу понять , какую...

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

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

7
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
22.03.2013, 02:13
Цитата Сообщение от iNsomNia7 Посмотреть сообщение
По идее должен либо заново выполнять программу при нажатии 'y' или же завершать работу при нажатии 'n', но ни того, ни другого не происходит.
с чего вдруг? Вдумайтесь в условие:
C++
1
dir != 'n' || dir != 'y'
Добавлено через 1 минуту
чтобы оно стало false, необходимо чтобы dir был равен 'n' и 'y' одновременно

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

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

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

Добавлено через 1 минуту
чтобы оно стало false, необходимо чтобы dir был равен 'n' и 'y' одновременно
Поясните, как тогда работает операция логического или ||? Ведь одно из двух условий должно удовлетворять, а не оба одновременно
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
22.03.2013, 02:21
Цитата Сообщение от 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
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
22.03.2013, 02:22
так одно и будет всегда удовлетворять. Либо неравенство 'у' выполнится, а если введут символ равный именно 'y', то неравенство 'n' выполнится!
0
Просто хороший человек
 Аватар для sannee
392 / 182 / 24
Регистрация: 26.04.2011
Сообщений: 434
22.03.2013, 02:25
у вас цикл будет прдолжать выполнять итерации до тех пор пока вы не введете символ который не равный 'y' или не равный 'n', а при нажатии любого из этих символов он выходит из цикла.
0
2 / 2 / 1
Регистрация: 19.11.2012
Сообщений: 32
22.03.2013, 02:36  [ТС]
Боже, дурак полный

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

Спасибо, за быстрый отклик.
0
22.03.2013, 02:47

Не по теме:

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2013, 02:47
Помогаю со студенческими работами здесь

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

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

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

Ошибка компиляции: нет перегруженной бинарной операции +.
Подскажите в чем ошибка. Компилятор говорит что нет перегруженной бинарной операции + для такого типа (41 строка) #include...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru