чтение из файла и сохранение в массиве переполнения стека

Мне нужно написать функцию, которая читает из файла и сохраняет значения в параллельных массивах. В текстовом файле у меня есть имя, а в следующей строке у меня есть набор из 4 баллов. Любые советы о том, как этого добиться.
вот пример текстового файла

joe
30 75 90 88
ben
100 75 93 20

теперь вот код, который я до сих пор

ifstream input;

int main()
{
string nameArray[];
double grades[];
void nameGrade(string[], double[]);

input.open("scores.txt");

nameGrade(nameArray, grades);

for (int i = 0; i <4; i++)
{
cout << "student name: " << nameArray[i] << " Student Grades: " << grades[i] << endl;
}
input.close();
return 0;
}

void nameGrade(string name[], double grade[])
{
for (int i = 0; i < 5; i++)
{
getline(input,studentName[i]);
input >> studentGrade[i];
}
}

-1

Решение

Поскольку в записи имеется только 1 имя, а в каждой записи — несколько оценок, переместите чтение имени до for цикл:

void nameGrade(string& name,
double grade[])
{
getline(input,name);
for (int i = 0; i < 5; i++)
{
input >> studentGrade[student_index * 5 + i];
}
}

Есть сложность в вашем дизайне. Каждый ученик имеет более одного класса. Таким образом, чтобы справиться с этим отношением, вам понадобится либо двумерный массив студентов, либо массив структур:

struct Student_Name_Grades
{
std::string name;
std::vector<double> grades; // substitute array here if necessary.
};
std::vector<Student_Name_Grades> student_info;
// Or:  Student_Name_Grades student_info[MAXIMUM_STUDENTS];

Другая альтернатива — иметь в 5 раз больше слотов, чем у студентов. Итак, чтобы получить доступ к оценкам ученика № 2:

const unsigned int GRADES_PER_STUDENT = 5;
unsigned int student_index = 2;
double grade_1 = grades[student_index * GRADES_PER_STUDENT + 0];
double grade_2 = grades[student_index * GRADES_PER_STUDENT + 1];
double grade_3 = grades[student_index * GRADES_PER_STUDENT + 2];
double grade_4 = grades[student_index * GRADES_PER_STUDENT + 3];
double grade_5 = grades[student_index * GRADES_PER_STUDENT + 4];
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]