Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227

Как правильно записывать условные операторы и как прервать проверку при достижении результата?

31.08.2014, 22:59. Показов 4491. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
доброго времени суток форумчане, подскажите пожалуйста как остановить условие после правильно выполненного условия.
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale (LC_ALL,"Russian");
    double cifra1,cifra2;
    char znak;
    system ("color 30");
    cout << "\t\t\t ///////////////////////////" << endl;
    cout << "\t\t\t // Программа калькулятор //" << endl;
    cout << "\t\t\t ///////////////////////////" << endl;
    cout << endl;
    cout << "\t\t\t  Программа понимает только:\n\n";
    cout << "\t\t / Сложение / Вычитание/ Умножение/ Деление /\n\n";
    cout << "\t    Введите сначала значение затем знак и второе значение" << endl;
    cin >> cifra1;
    cin >> znak;
    cin >> cifra2;
    cout << endl;
    if ( znak=='+' )
        cout << "Ваш ответ: " << cifra1 <<"+"<< cifra2 <<"="<< cifra1+cifra2 << endl;
    if ( znak=='-' )
        cout << "Ваш ответ: " << cifra1 <<"-"<< cifra2 <<"="<< cifra1-cifra2 << endl;
    if ( znak=='*' )
        cout << "Ваш ответ: " << cifra1 <<"*"<< cifra2 <<"="<< cifra1*cifra2 << endl;
    if ( znak=='/' )
        cout << "Ваш ответ: " << cifra1 <<"/"<< cifra2 <<"="<< cifra1/cifra2 << endl;
    else
        cout << "Введенные вами данные не соответствуют указанным!" << endl;
        cout << "Пожалуйста введите корректные данные\n\n";
    return 0;
}
P.S. я только начинающий программист
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.08.2014, 22:59
Ответы с готовыми решениями:

Как правильно записать условные операторы
Скажите не понимаю почему редактор подсвечивает именно Else и End if If IsNumeric(TextBox1.Text) And ComboBox1.Text...

Как правильно записывать и считывать двумерные массивы при работе с файлами
Как правильно записывать и считывать двумерные массивы при работе с файлами? Поискал в интернете, ничего толкового нет. FILE *t; ...

Как использовать условные операторы в ассемблерной вставке
Вообщем суть в том,чтобы переписать программу,ранее написанную на паскале,в код asm Asm используется,встроенный в Turbo Pascal....

60
 Аватар для web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
01.09.2014, 22:27  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от KOPOJI Посмотреть сообщение
VS обновляли что ли?
да.
Цитата Сообщение от KOPOJI Посмотреть сообщение
будет ошибка "divizion by zero". На ноль делить нельзя, это еще в школе все проходят..
знаю я что в школе проходили и все же нельзя сказать что ответ не будет правильным с одной стороны и все же ты прав.

Добавлено через 2 минуты
получается нужно еще одно условие до начала процедуры вычисления?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.09.2014, 22:27
Цитата Сообщение от web-magician Посмотреть сообщение
да.
удали этот файл (Debug\калькулятор.pch) и пересобери проект..
1
 Аватар для web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
01.09.2014, 22:29  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
удали этот файл (Debug\калькулятор.pch) и пересобери проект..
я скопирую код и создам новую копию проги.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.09.2014, 22:33
Цитата Сообщение от web-magician Посмотреть сообщение
получается нужно еще одно условие до начала процедуры вычисления?
ну да

Добавлено через 4 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
ну да
P.S. Если вы использовали if-else if, то можно изменить условие с делением на такое
C++
1
else if ( znak == '/' && cifra2 != 0 )
А в тексте ошибки исправить на такой, например:
C++
1
cout << "Введенные вами данные некорректны для выполнения указанной операции" << endl;
0
 Аватар для web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
01.09.2014, 22:42  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
1
else if ( znak == '/' && cifra2 != 0 )
Ладно,а если первое значение будет равен нулю? (cifra1) тогда ведь тоже будет не верно т.к. от перестановки мест слагаемых сумма не меняется...

Добавлено через 38 секунд
Цитата Сообщение от KOPOJI Посмотреть сообщение
1
cout << "Введенные вами данные некорректны для выполнения указанной операции" << endl;
так красивее...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.09.2014, 22:42
web-magician, на ноль делить нельзя. А ноль делить можно, получится ноль
0
 Аватар для web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
01.09.2014, 22:56  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
web-magician, на ноль делить нельзя. А ноль делить можно, получится ноль
логично.

Добавлено через 13 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
switch ( znak )
    case '+' :
        cout << "Ваш ответ: " << cifra1 <<"+"<< cifra2 <<"="<< cifra1+cifra2 << endl;break;
    case '-':
        cout << "Ваш ответ: " << cifra1 <<"-"<< cifra2 <<"="<< cifra1-cifra2 << endl;break;
    case '*':
        cout << "Ваш ответ: " << cifra1 <<"*"<< cifra2 <<"="<< cifra1*cifra2 << endl;break;
    case '/':
        cout << "Ваш ответ: " << cifra1 <<"/"<< cifra2 <<"="<< cifra1/cifra2 << endl;break;
    default:
        cout << "Введенные вами данные некорректны для выполнения указанной операции! Пожалуйста введите корректные данные\n\n" << endl;
    return 0;
}
что тут не так?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
01.09.2014, 22:57
Цитата Сообщение от KOPOJI Посмотреть сообщение
...а вот на дробное число "ноль" - на 0.0 можно разделить.. И получить бесконечность)
ну не совсем бесконечность
а 1.#INF000000000000
которую интерпретируют как бесконечность, настоящая в комп не влезет
-1.#INF000000000000
здесь Evg примерчик привел
да и целочисленные можно не проверять, главное исключения ловить
http://www.firststeps.ru/mfc/steps/r.php?351
хотя для ТС это следующий этап
кстати, видел парочку защит от дизасемблирования
типа таких
C++
1
2
3
4
5
6
7
8
9
10
11
      try
    {
             int a=5;
             int b=5
        i=i/(a-b);      // деление на 0,напрямую не все компиляторы позволяют на 0 разделить
    }
    catch(...)
    {
        // здесь защитный код, дизасемблер напрочь выбивает
                      // приходится ручками
    }
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.09.2014, 22:58
Цитата Сообщение от web-magician Посмотреть сообщение
что тут не так?
отсутствие проверки на ноль во втором числе в последнем case?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
01.09.2014, 22:58
Цитата Сообщение от web-magician Посмотреть сообщение
что тут не так?
открывающей скобки после switch не вижу
0
 Аватар для web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
01.09.2014, 23:01  [ТС]
сам нашел)))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch ( znak )
    {
    case '+':
        cout << "Ваш ответ: " << cifra1 <<"+"<< cifra2 <<"="<< cifra1+cifra2 << endl;break;
    case '-':
        cout << "Ваш ответ: " << cifra1 <<"-"<< cifra2 <<"="<< cifra1-cifra2 << endl;break;
    case '*':
        cout << "Ваш ответ: " << cifra1 <<"*"<< cifra2 <<"="<< cifra1*cifra2 << endl;break;
    case '/':
        cout << "Ваш ответ: " << cifra1 <<"/"<< cifra2 <<"="<< cifra1/cifra2 << endl;break;
    default:
        cout << "Введенные вами данные некорректны для выполнения указанной операции! Пожалуйста введите корректные данные\n\n" << endl;
    }
    return 0;
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
01.09.2014, 23:03
Цитата Сообщение от web-magician Посмотреть сообщение
cout << "Введенные вами данные некорректны для выполнения указанной операции! Пожалуйста введите корректные данные\n\n" << endl;
текст ни о чем не говорит
напиши типа
"В данной версии не поддерживается такой оператор, поддерживаются сложение + вычитание - умножение * деление /"
или что то типа, у тебя же не данные проверяются а оператор
0
 Аватар для web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
01.09.2014, 23:04  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
отсутствие проверки на ноль во втором числе в последнем case?
это у меня тут
C++
1
2
3
4
5
6
7
8
cout << "Ваши значения ";
    cin >> cifra1;
    cin >> znak;
    cin >> cifra2;
    if (cifra2 !=0)
        cout << "Введенные вами данные некорректны для выполнения указанной операции! Пожалуйста введите корректные данные\n\n" << endl;
    cout << endl;
    switch ( znak )
Добавлено через 39 секунд
Цитата Сообщение от ValeryS Посмотреть сообщение
текст ни о чем не говорит
напиши типа
"В данной версии не поддерживается такой оператор, поддерживаются сложение + вычитание - умножение * деление /"
или что то типа, у тебя же не данные проверяются а оператор
хорошо, сейчас исправлю.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
01.09.2014, 23:04
Цитата Сообщение от web-magician Посмотреть сообщение
это у меня тут
а для остальных действий 0 то корректен
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.09.2014, 23:06
Цитата Сообщение от ValeryS Посмотреть сообщение
а для остальных действий 0 то корректен
а он и сработает для всех действий, else то нет, и ни return-ов, ни бросков исключений тоже нет..
0
 Аватар для web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
01.09.2014, 23:10  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
а для остальных действий 0 то корректен
а операция дальше пройдет если через это условие выйдет? и если да то может так
C++
1
2
if ( cifra2 !=0 )
        cout << "Введенные вами данные некорректны для выполнения указанной операции! Пожалуйста введите корректные данные\n\n" << endl;else return -1
Добавлено через 2 минуты
а нельзя перенаправить в случае деления на нуль на тот cout с выводом сообщения
C++
1
cout << "Введенные вами данные некорректны для выполнения указанной операции! Пожалуйста введите корректные данные\n\n" << endl
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.09.2014, 23:13
web-magician,
C++
1
2
3
4
5
6
if ( znak == '/' && cifra2 ==0 )
        cout << "Введенные вами данные некорректны для выполнения указанной операции! Пожалуйста введите корректные данные\n\n" << endl;
else
{
    switch(znak) { ..... }
}
1
 Аватар для web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
01.09.2014, 23:17  [ТС]
еще один момент уже для себя на будущее есть ли ошибка в такой форме записи
C++
1
znak == '/' && cifra2 == 0
или в такой
C++
1
znak=='/'&&cifra2==0
???
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
01.09.2014, 23:18
Цитата Сообщение от web-magician Посмотреть сообщение
if ( cifra2 !=0 )
cout << "Введенные вами данные некорректны для выполнения указанной операции! Пожалуйста введите корректные данные\n\n" << endl;else return -1
как минимум условие попутал да и else лишнее

Цитата Сообщение от web-magician Посмотреть сообщение
а нельзя перенаправить в случае деления на нуль на тот cout с выводом сообщения
ну вот покажу тебе одну хитрость
проваливание называется
C++
1
2
3
4
5
6
7
8
9
 case '/':
         if(cifra2!=0)
           {  
            cout << "Ваш ответ: " << cifra1 <<"/"<< cifra2 <<"="<< cifra1/cifra2 << endl;
           break;
           };
 
default:
        cout << "Введенные вами данные некорректны для выполнения указанной операции! Пожалуйста введите корректные данные\n\n" << endl;
если cifra2 не равна 0 то отработает if и выйдет из switch по break
а если равна то if не отработает breakа не будет и программа уйдет("провалится") в ветку default
0
 Аватар для web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
01.09.2014, 23:20  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
если cifra2 не равна 0 то отработает if и выйдет из switch по break
а если равна то if не отработает breakа не будет и программа уйдет("провалится") в ветку default
интересная вещь, возьму на заметку...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.09.2014, 23:20

Как правильно прервать/возобновить цикл
Такая вот проблема: есть часто встречающаяся функция ввода вещественного массива (как правило, большого). При вводе не цифры приходится все...

Как правильно прервать вставку в триггере?
Всем привет! в триггере делаю такую проверку: IF (NEW.Building &lt;&gt; 'A1' OR NEW.Building &lt;&gt; 'A2') THEN EXCEPTION...

Условные операторы при определении нечетных чисел
Добрый день. Подскажите, как в моем случае сделать так, чтобы при вводе только одних нулей выдавалось соответствующее сообщение без вывода...

С++.Операторы в С++: условные операторы, операторы break и continue
Выяснить, пересекаются ли параболы у=аx2+bx+с и у=dx2+ex + f. При положительном ответе найти точки пересечения.

Условные операторы при работе с массивом целых чисел
Дан массив целых чисел. Выяснить верно ли, что сумма элементов, которые больше 20, превышает 100.


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru