Тема: C++ після повторного виклику меню, не працює вихід але продовжує ввід
після повторного виклику меню, не працює вихід але продовжує ввід. Якщо ж виходити з програми зразу то все працює, але якщо я введу дані, повернусь в меню, то вихід не працює, замість виходу програма продовжує ввід данних, не розумію в чому проблема
P.S.:
також вислухаю аргументовану критику на рахунок деяких реалізацій(можливо підкажете щодо динамічної структури, поки оюмежуюсь таким варіантом як є(вектори і файли не використовувати, обмеження завдання))
#include <iostream>
#include <stdlib.h>
#include <cctype>
#include <cstring>
#include <cstdlib>
#include <iomanip>
#include <locale>
#include <Windows.h>
#include <utility>
#include <algorithm>
using namespace std;
int n = 0;
struct vust {
char Name[20];
struct date {
int day;
int month;
int year;
}Date;
int tickets;
int price;
}Group[100];
void enter(), print(), sortP(), sortN(), display(), menu(), display2();
int quit();
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
menu();
/*char choice;
for (;;) {
choice = menu();
switch (choice) {
case 'e': enter();
break;
case 'n': sortN();
break;
case 'p': sortP();
break;
case 'r': ;
break;
case 'd': ;
break;
case 'q': quit();
break;
}
}
system("pause");*/
}
void menu()
{
char ch;
cout << "\n";
do {
cout << "\n(E)Ввести данні про виставу\n";
cout << "(N)Сортувати за назвою вистави\n";
cout << "(P)Сортувати за ціною\n";
cout << "(D)Вивести всі вистави\n";
cout << "(Q)Вийти з програми\n";
cout << "(T)Вивести вистави конкретного дня\n";
cout << "Виберіть команду: ";
cin >> ch;
} while (!strchr("enptdq", tolower(ch)));
switch (ch)
{
case 'e': enter();
break;
case 'n': sortN();
break;
case 'p': sortP();
break;
case 'q': quit();
break;
case 'd': display();
break;
case 't': display2();
break;
}
//return tolower(ch);
}
void enter()
{
char c;
for (int i = n; i < sizeof(Group); i++)
{
cout << endl << "Введіть назву вистави: ";
cin >> Group[i].Name;
cout << "Введіть день вистави: ";
cin >> Group[i].Date.day;
cout << "Введіть місяць вистави: ";
cin >> Group[i].Date.month;
cout << "Введіть рік вистави: ";
cin >> Group[i].Date.year;
cout << "Введіть кількість квітків: ";
cin >> Group[i].tickets;
cout << "Введіть ціну квитка: ";
cin >> Group[i].price;
n += 1;
do {
cout << "\n(M)Повернутись в меню";
cout << "\n(E)Продовжити вводити дані";
cout << "\nВиберіть команду: ";
cin >> c;
} while (!strchr("em", tolower(c)));
switch (c)
{
case 'e': continue;
break;
case 'm': menu();
break;
}
}
}
void sortP()
{
for (int j = 0; j < n; j++)
{
for (int i = 0; i < n-1-j; i++)
{
if (Group[i].price > Group[i + 1].price)
{
swap(Group[i], Group[i + 1]);
}
}
}
display();
}
void sortN()
{
for (int j = 0; j < n; j++)
{
for (int i = 0; i < n-1-j; i++)
{
if (strcmp(Group[i].Name, Group[i+1].Name) > 0)
{
swap(Group[i], Group[i + 1]);
}
}
}
display();
}
void display()
{
if (n == 0)
cout << "\nСписок пустий!\n";
for (int i = 0; i < n; i++)
{
cout << endl << "\nНазва вистави: "; cout << Group[i].Name;
cout << endl << "День вистави: "; cout << Group[i].Date.day;
cout << endl << "Місяць вистави: "; cout << Group[i].Date.month;
cout << endl << "Рік вистави: "; cout << Group[i].Date.year;
cout << endl << "Кількість квітків: "; cout << Group[i].tickets;
cout << endl << "Ціна квитка: "; cout << Group[i].price;
}
menu();
}
int quit()
{
return 0;
}
void display2()
{
int d, m, y, k = 0;
cout << "\n\nВведіть дату";
cout << "День: "; cin >> d;
cout << "Місяць: "; cin >> m;
cout << "Рік: "; cin >> y;
for (int i = 0; i < n; i++)
{
if (d == Group[i].Date.day && m == Group[i].Date.month && y == Group[i].Date.year)
{
cout << endl << "\nНазва вистави: "; cout << Group[i].Name;
cout << endl << "День вистави: "; cout << Group[i].Date.day;
cout << endl << "Місяць вистави: "; cout << Group[i].Date.month;
cout << endl << "Рік вистави: "; cout << Group[i].Date.year;
cout << endl << "Кількість квітків: "; cout << Group[i].tickets;
cout << endl << "Ціна квитка: "; cout << Group[i].price;
k = 1;
}
}
if (k == 0)
cout << "\nВистав у цей день немає!\n";
menu();
}