@michadimin

Как вернуться в функцию «main()» после выполнения какой-либо функции?

Я написал программу для вычисления дискриминанта, но помимо неё я собираюсь дать программе ещё несколько вариантов работы с числами, но сделать это так, чтобы консольное окно не закрывалось после выполнения одной из операций с числами. Тоби-ж, зациклить программу, пока пользователь сам её не закроет. Вот код программы(если нужно) - https://pastebin.com/xQf3g1vC

Функцию "sqr()" я написал в виде заголовочного файла, ибо такой метод выглядит более читабельным, чем "x*x", ну как по мне.
  • Вопрос задан
  • 743 просмотра
Решения вопроса 1
@maximsemin23
#include <iostream>
#include <string>
#include <cmath>
#include "int_sqr.h"
using namespace std;

int a, b, c, d;
double x1, x2;

int discriminant() {
    setlocale(LC_ALL, "Russian");
    cout << "Введите число \"a\": ";
    cin >> a;
    cout << endl << "Введите число \"b\": ";
    cin >> b;
    cout << endl << "Введите число \"c\"";
    cin >> c;
    d = sqr(b) - 4 * a * c;
    cout << "Дискриминант = " << d << endl;
    if (d < 0) {
        cout << "Нет корней!" << endl << endl;
    }
    else {
        x1 = (-b + sqrt(d)) / (2 * a);
        x2 = (-b - sqrt(d)) / (2 * a);
        cout << "x1 = " << x1 << endl << "x2 = " << x2 << endl << endl;
    }
    return 0;
}

void mainloop()
{
    string parm;
    cout << "Что вы хотите сделать?" << endl;
    cout << "Введите \"D\" если хотите найти дискриминант" << endl << "Введите \"+\" если хотите найти сумму чисел" << endl << "Введите \"-\" если хотите найти разность чисел" << endl << "Введите \"**\" если хотите найти квадрат числа" << endl;
    cout << "Введите параметр: ";
    cin >> parm;
    if (parm == "D") {
        cout << "Выбрано нахождение дискриминанта!" << endl << "Начинаем!" << endl << endl;
        discriminant();
    }
}


int main()
{
    setlocale(LC_ALL, "Russian");
    
    while (true)
        mainloop();
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
#include <iostream>
#include <string>

using namespace std;

inline void error(const string& msg) {
    throw msg.c_str();
}

inline void error(const char* msg = nullptr) {
    throw msg;
} 

void func2()
{
    error("Just error.");
}

void func()
{
    func2();
    error(); // Just return to main()
}


int main()
{
    while (true) {
        try {
            func();
        }
        catch (const char* msg) {
            if (msg != nullptr)
                cerr << "Error: " << msg << endl;
        }
    }
    return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы