Как реализовать нормальное меню?

165
24 января 2019, 00:00

Есть класс в котором перегружаются операции. В main происходит тестирование перегрузок, т.е. я выбираю из меню какие именно операции нужно протестировать. Не могу сделать нормальное зацикленное меню, то есть тестировать пока пользователь не введет "4" - выход из программы. И как можно сделать вот этот код проверки введенного пользователем значения отдельной функцией:

cin.clear();
while (cin.get() != '\n');
cout << "Ошибка! Повторите попытку: ";

Сама программа:

//Программа тестирует класс "Еда"
#include"Food.h"
#include<iostream>
/*Тестирование перегруженной операции декремента
Входные данные: ссылка на экземпляр класса Food;
Выходные данные: модификация значения срока годности продукта*/
void operation1(Food& object1) {
    cout << "\nОперация <Перегрузка декремента>." << endl;
    cout << "Операнд: " << object1.get_product_shelf_life() << "дней" << endl;
    --object1;
    cout << "Результат операции: " << object1.get_product_shelf_life() << "дней" << endl;
}
/*Тестирование перегруженной операции +=
Входные данные: ссылки на экземпляры класса Food;
Выходные данные: модификация значения имени левого операнда*/
void operation2(Food& object1, Food object2) {
    cout << "\n<Перегрузка операции +=>." << endl;
    cout << "Операнд 1: " << object1.get_name() << "\nОперанд 2: " <<  object2.get_name() << endl;
    object1 += object2;
    cout << "Результат операции: " << object1.get_name() << endl;
}
/*Тестирование перегруженной операции сравнения (>)
Входные данные: ссылки на экземпляры класса Food;
Выходные данные: true - если значение левого операнда больше чем значение правого,
                 false - если значение значение левого операнда меньше чем правого*/
void operation3(Food& ob1, Food& ob2) {
    cout << "\n<Перегрузка операции " << "(>)>." << endl;
    cout << "Операнд 1: " << ob1.get_name() << " - " << ob1.get_calories() << " ккал" << endl;
    cout << "Операнд 2: " << ob2.get_name() << " - " << ob2.get_calories() << " ккал" << endl;
    cout << "Результат операции: ";
    if (ob1 > ob2) cout << "калорийность " << ob1.get_name() << " больше чем " << ob2.get_name() << endl;
    else { cout << "калорийность " << ob2.get_name() << " больше чем " << ob1.get_name() << endl;}
}
int main(){
    setlocale(LC_ALL, "rus");
    int reg;
    bool flag = true;
    Food f1("Шоколад", 500, 30.0, 100);
    Food f2("Кофе", 150, 10.0, 360);
    f1.Print();
    f2.Print();
    do {
        cout << "1.Перегрузка операции --;\n2.Перегрузка операции +=;\n3.Перегрузка операции >;\n4.Выйти из программы.";
        cout << "\nСделайте выбор: ";
        cin >> reg;
        switch (reg) {
        case 1: {operation1(f1); }
        case 2: {operation2(f1, f2); }
        case 3: {operation3(f1, f2); }
        case 4: {exit(0); }
        }
    } while (flag);
    cin.get();
    return 0;
}
Answer 1

Можно вот так:

int main(){
    setlocale(LC_ALL, "rus");
    int reg;
    bool flag = true;
    Food f1("Шоколад", 500, 30.0, 100);
    Food f2("Кофе", 150, 10.0, 360);
    f1.Print();
    f2.Print();
    while(true) {
        cout << "1.Перегрузка операции --;\n2.Перегрузка операции +=;\n3.Перегрузка операции >;\n4.Выйти из программы.";
        cout << "\nСделайте выбор: ";
        cin >> reg;
        switch (reg) {
        case 1: {operation1(f1); break;}
        case 2: {operation2(f1, f2); break; }
        case 3: {operation3(f1, f2); break; }
        case 4: {return 0; }
        }
}
READ ALSO
Вывести 1000 знаков суммы ряда

Вывести 1000 знаков суммы ряда

есть бесконечный ряд

156
Небольшой вопрос по OPEN MP

Небольшой вопрос по OPEN MP

Задание нужно распараллелить с помощью OpenMP

143
Как из метода onClick передать переменную num в onOptionsItemSelected?

Как из метода onClick передать переменную num в onOptionsItemSelected?

Не нужно ничего никуда передавать, вы можете сделать переменную num членом класса NewNote, а не функции onCLick() (как dbHelper и др), в функции onCLick() просто...

235
Подсветка кода в javaFX приложении

Подсветка кода в javaFX приложении

Пишу JavaFX приложение - ридер, для чтения спецфайлов, содержащих код специфичного языка программирования

144