Я хочу создать функцию, которая будет присваивать значение массива структуры, и он будет определять члена структуры через свой параметр.
Я имею в виду вместо создания отдельной функции для каждого члена структуры,определить член с помощью параметра функции (примеры: & .tests, courses.exams)
Записанный кодекс предназначен только для объяснения того, что я имею в виду, значения можно импортировать из текстового файла вместо назначения их с помощьюслучайный.
То, что я хочу понять, это;Есть ли другой способ вызвать член структуры без записи его имени?
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
struct lsn
{
char name[20];
int tests[4];
int quizzes[4];
int exams[4];
int finals[4];
};
void random_notes(lsn *x, int *y)
{
int i,j;
for(i=0;i<20;i++)
for(j=0;j<4;j++);
x[i].y[j]=rand()%101;
}
int main()
{
srand(time(NULL));
lsn lessons[30];
random_notes(lessons, &.tests);
random_notes(lessons, &.quizzes);
random_notes(lessons, &.exams);
random_notes(lessons, &.finals);
return 0;
}
Вместо создания 4 функций, как показано ниже,
void random_tests(lsn *x)
{
int i,j;
for(i=0;i<20;i++)
for(j=0;j<4;j++);
x[i].tests[j]=rand()%101;
}
void random_quizzes(lsn *x)
{
int i,j;
for(i=0;i<20;i++)
for(j=0;j<4;j++);
x[i].quizzes[j]=rand()%101;
}
void random_exams(lsn *x)
{
int i,j;
for(i=0;i<20;i++)
for(j=0;j<4;j++);
x[i].exams[j]=rand()%101;
}
void random_finals(lsn *x)
{
int i,j;
for(i=0;i<20;i++)
for(j=0;j<4;j++);
x[i].finals[j]=rand()%101;
}
Всего одна функция, которая определяет член структуры через егопараметр,
void random_notes(lsn *x, .struct_member y)
{
int i,j;
for(i=0;i<20;i++)
for(j=0;j<4;j++);
x[i].y[j]=rand()%101;
}
В этом примере функция очень мала, но представьте огромный код в функции, отличается только элемент struct, а остальная часть кода такая же.