Работа оператором Switch

Хотел переделать задачу «калькулятор» ,которая была выполнена с помощью if else if, с помощью оператора switch .
Работает задача хорошо , только когда пользователь следует командам например:
Введите число(1): 5
Выберите действие: 5 (которого нету)
[Debug error!]

#include <iostream>
using namespace std;

int main()
{
    setlocale(LC_ALL,"Russian");
    double a,b,c;
    int choice;
    cout<<"Калькулятор от Дилика!!!\n";
    cout<<"Введите число(1):\n";
    cin>>a;
    cout<<"Выберите действие.\n";
    cout<<" [1]Сложение(+)\n [2]Вычитание(-)\n [3]Умножение(*)\n [4]Деление(/)\n";
    cin>>choice;
    switch (choice) {
        case 1:
            cout<<"Введите число(2):\n";
            cin>>b;
            c=a+b;
            break;
        case 2:
            cout<<"Введите число(2):\n";
            cin>>b;
            c=a-b;
            break;
        case 3:
            cout<<"Введите число(2):\n";
            cin>>b;
            c=a*b;
            break;
        case 4:
            cout<<"Введите число(2):\n";
            cin>>b;
            c=a/b;
            break;
        default:
            cout<<"Вы должны выбрать действие!!!\n";
    }

    cout<<"Ответ: ";
    cout<<c<<endl;
    return 0 ;
}

Dillik, когда вы вводите значение несуществующего кейса (в данном случае — число 5), срабатывает блок default конструкции switch.

После завершения проверки, у вас происходит вывод результата (переменная c). Если вы вводите значение, попадающее в блок default, переменная c остается не инициализированной. Скорее всего, из-за этого и происходит ошибка в процессе выполнения.

Решение проблемы: при срабатывании default, завершайте работу программы с помощью оператора return.

default:
    std::cerr << "Вы должны выбрать действие!" << std::endl; // Вывод сообщение в поток ошибок
    return 1; // Код завершения программы, отличный от нуля является признаком аварийного завершения.
}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.