Задача - создать класс Группа, содержащий массив объектов класса Студент, и добавить в него меню для работы с группой. Я решил реализовать меню с управлением мышью. Проблема в том, что, когда пытаюсь добавить в группу новых студентов, cin на количество студентов не работает - курсор есть, но ввод произвести нельзя. А после нажатия нескольких рандомных клавиш (но не всех), программа вылетает с какой-нибудь ошибкой (в разных случаях ошибки разные). Необходимый код функций прилагаю (все лишнее или непонятное заменено/дополнено комментариями).
group &group::menu()
{
CONSOLE_SCREEN_BUFFER_INFO bi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &bi);
/*здесь вывод меню*/
cout << endl;
const int menu_size = 7;
hovered_area menu[menu_size];//hovered_area - структура, хранящая координаты однострочной прямоуг. области
for (int i = 0; i < menu_size; i++)
{
menu[i].left_border = 0;
menu[i].right_border = 25;
menu[i].height = bi.dwCursorPosition.Y + 1 + i;
}
return mouse(menu);
}
group &group::mouse(hovered_area *area)
{
int menu_size = 7;
DWORD dwOldMode, dwMode, dwNumRead;
GetConsoleMode(hStdIn, &dwOldMode);//hStdIn объявлен в заголовочном файле
dwMode = ENABLE_MOUSE_INPUT;
SetConsoleMode(hStdIn, dwMode);
INPUT_RECORD irInBuf[128];
COORD mousePos;
DWORD mouseButtonState;
while (1)
{
ReadConsoleInput(hStdIn, irInBuf, 128, &dwNumRead);
for (DWORD i = 0; i < dwNumRead; i++)
{
mousePos = irInBuf[i].Event.MouseEvent.dwMousePosition;
if (irInBuf[i].Event.MouseEvent.dwEventFlags == MOUSE_MOVED)
{
for (int i = 0; i < menu_size; i++)
{
/*подсвечивание выбранного пункта при наведении*/
}
}
mouseButtonState = irInBuf[i].Event.MouseEvent.dwButtonState;
if (mouseButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
{
for (int j = 0; j < menu_size; j++)
{
if (mousePos.X >= area[j].left_border && mousePos.X <= area[j].right_border && mousePos.Y == area[j].height)
{
char name[100];
int homeworks, done_homeworks;
int *marks;
int n;
vector<student> a;
switch (j)
{
/*case 0-2*/
case 3:
marks = new int[1];
marks[0] = -1;
delete[] marks;
cout << "Введите количество добавляемых студентов: ";
cin >> n;//проблемный cin
for (int k = 0; k < n; k++)
{
cout << "Введите имя студента: ";
cin.getline(name, 100);
cout << "Введите количество домашних заданий: ";
cin >> homeworks;
cout << "Введите количество выполненных домашних заданий: ";
cin >> done_homeworks;
if (done_homeworks != 0)
{
marks = new int [done_homeworks];
cout << "Введите оценки: ";
for (int l = 0; l < done_homeworks; l++)
{
cin >> marks[i];
}
}
if (done_homeworks != 0)
{
a.push_back(student(name, homeworks, done_homeworks, marks));
}
else
{
a.push_back(student(name, homeworks));
}
}
*this += group("", a);
return *this;
/*case 4-6*/
}
}
}
}
}
}
SetConsoleMode(hStdIn, dwOldMode);
}
При необходимости могу дополнить вопрос.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня есть таблица компании, таблица недвижимости и таблица с параметрами недвижимостиПри выборе недвижимости, например квартиры на съем,...
Интересует вопрос можно ли то таблицу в которой одно из полей будет содержать в себе количество записей из другой таблицы? В access вроде так...
ЗдравствуйтеЕсть характеристики которые берутся из 3 (трех) таблиц