Передача целой структуры в функцию
Проблема в том, что у меня есть структура, которая задана не глобально, а внутри функции main(). Предположим, что в моей структуре есть несколько полей. Я создаю массив структур. Затем я создаю новую функцию, в которой хочу изменить значения всех полей, допустим, 0-го элемента массива структур. Я разобрался с тем как передать адреса полей в функцию, нашёл как передать массив структур в функцию, но в источниках при передаче массива структур, структура задана глобально, поэтому у меня не выходит сделать также. Условие задания: глобальные переменные использовать нельзя!
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <clocale>
#include <fstream>
using namespace std;
void Input(int& n, int& a, int& b, char* c, char* g);
void Adding(int& a, int& b, char* c, char* g);
void Looking(int n, int& a, int& b, char* c, char* g);
void Output();
void Changing();
void Removing(int v, int& a, int& b, char* c, char* g);
int main()
{
setlocale(LC_ALL, "Russian");
union Sex {
char _sex[2];
};
struct Olympiad {
char surname[30];
int points;
int rank;
Sex sex;
enum SexNumber { man_number = 1, woman_number };
} mass[8];
strcpy_s(mass[0].surname, "Smith");
strcpy_s(mass[1].surname, "Lemon");
strcpy_s(mass[2].surname, "Teuchi");
strcpy_s(mass[3].surname, "Tennant");
strcpy_s(mass[4].surname, "Lona");
mass[0].points = 99;
mass[1].points = 75;
mass[2].points = 60;
mass[3].points = 47;
mass[4].points = 16;
mass[0].rank = 1;
mass[1].rank = 2;
mass[2].rank = 3;
mass[3].rank = 4;
mass[4].rank = 5;
strcpy_s(mass[0].sex._sex, "M");
strcpy_s(mass[1].sex._sex, "W");
strcpy_s(mass[2].sex._sex, "M");
strcpy_s(mass[3].sex._sex, "M");
strcpy_s(mass[4].sex._sex, "W");
menu();
system("pause");
return 0;
}
void menu() {
int p = 0, a, v, n = 5; //n - кол-во строк в таблице
cout << "Введите число для выбора операции: " << endl;
cout << "1)Ввод данных в таблицу из текстового файла" << endl;
cout << "2)Добавление новых элементов в конец таблицы" << endl;
cout << "3)Просмотр таблицы" << endl;
cout << "4)Ввод данных из текстового файла в таблицу" << endl;
cout << "5)Изменение выбранного элемента таблицы" << endl;
cout << "6)Удаление выбранного элемента таблицы" << endl;
cout << "7)Выход" << endl;
cin >> p;
switch (p) {
case 1:
Input(n, mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
menu();
break;
case 2:
cout << "Сколько строк Вы желаете ввести?" << endl;
cin >> a;
for (a; a > 0; a--) {
Adding(mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
n++;
}
Looking(n, mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
menu();
break;
case 3:
Looking(n, mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
menu();
break;
case 4:
Output();
menu();
break;
case 5:
Changing();
menu();
break;
case 6:
cout << "Которую строку Вы желаете удалить?" << endl;
cin >> v;
n--;
Removing(v, mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
Looking(n, mass[n].points, mass[n].rank, mass[n].surname, mass[n].sex._sex);
menu();
break;
case 7:
exit(0);
}
}
void Input(int& n, int& a, int& b, char* c, char* g) {
ifstream Table("Table.txt");
if (!Table)
{
cout << "Error!" << endl;
exit(1);
}
char s;
int number_n = 0;
while (!Table.eof())
{
Table.get(s);
if (s == '\n')
number_n++;
}
Table.close();
Table.open("Table.txt");
n = number_n + 1;
for (int i = 0; i < n; i++) {
Table >> mass[i].surname;
Table >> mass[i].points;
Table >> mass[i].rank;
Table >> mass[i].sex._sex;
}
Table.close();
}
void Adding(int& a, int& b, char* c, char* g) {
int d;
char m = 'M';
char w = 'W';
cout << "Введите имя участника олимпиады:" << endl;
cin >> c;
cout << "Введите количество очков, полученное участником:" << endl;
cin >> a;
cout << "Введите место участника:" << endl;
cin >> b;
cout << "Введите «1», если участник - мужчина и «2», если участник - женщина" << endl;
cin >> d;
switch (d) {
case mass[0].man_number:
*g = 'M'; // M - man
break;
case mass[0].woman_number:
*g = 'W'; // W - woman
break;
}
}
void Looking(int n, int& a, int& b, char* c, char* g) {
cout << "Surname" << setw(20) << "Points" << setw(20) << "Rank" << setw(20) << "Sex" << endl;
for (int i = 0; i < n; i++)
cout << mass[i].surname << "\t" << setw(19) << mass[i].points << setw(19) << mass[i].rank << setw(19) << mass[i].sex._sex << endl;
}
void Output() {
}
void Changing() { //Также необходимо передать адреса для изменения
}
void Removing(int v, int& a, int& b, char* c, char* g) {
for (v; v < 8; v++) {
strcpy_s(mass[v - 1].surname, mass[v].surname);
mass[v - 1].points = mass[v].points;
mass[v - 1].rank = mass[v].rank;
strcpy_s(mass[v - 1].sex._sex, mass[v].sex._sex);
}
}