如何在Input_Data函数中纠正我的嵌套以进行循环

How to correct my nested for loop in the input_data function?

本文关键字:嵌套 我的 循环 Input 函数 Data      更新时间:2023-10-16

我的问题是,在input_data((函数中,函数为两个参数,即ifile和statistics_array。该功能通过五组学期的最终考试数据读取(循环(并填充了statistics_array的一部分。觉得循环是错误的,因为最后,当我输出所有信息时,我的代码和文件内容在下方如何解决此问题?

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
struct ExamType {
    string semester_name;
    int year;
    int num_grades;
    float average_grade;
    int grades_above_average;
    int grades_below_average;
    int grades_array[35];
};
void input_data(ExamType[], ifstream&);
void calculate_statistics(ExamType[]);
void print_results(ExamType[]);
void calculate_average(ExamType[], int);
void calculate_above_average(ExamType[], int);
void calculate_below_average(ExamType[], int);
int main()
{
    char make_type;
    ifstream myfile;
    ExamType statistics_array[5];
    myfile.open("infile.txt");
    input_data(statistics_array, myfile);
    calculate_statistics(statistics_array);
    print_results(statistics_array);
}
void input_data(ExamType statistics_array[], ifstream& myfile)
{
    int num_students;
    for (int i = 0; i < 5; i++) {
        myfile >> statistics_array[i].semester_name;
        myfile >> statistics_array[i].year;
        myfile >> statistics_array[i].num_grades;
        for (int j = 0; j < statistics_array[i].num_grades; j++) {
            statistics_array[j].grades_array[i];
        }
    }
}
void calculate_statistics(ExamType statistics_array[])
{
    for (int index = 0; index < 5; index++)
    {
        calculate_average(statistics_array, index);
        calculate_above_average(statistics_array, index);
        calculate_below_average(statistics_array, index);
    }
}
void calculate_average(ExamType statistics_array[], int index)
{
    float sum=0;
    float total_average;
    for (int i = 0; i < statistics_array[index].num_grades; i++)
    {
         sum=sum+statistics_array[index].grades_array[i];
    }
    total_average = sum / statistics_array[index].num_grades;
    statistics_array[index].average_grade = total_average;
}
void calculate_above_average(ExamType statistics_array[], int index)
{
    int count = 0;
    for (int i = 0; i < statistics_array[index].num_grades; i++)
    {
        if (statistics_array[index].grades_array[index] > statistics_array[index].average_grade) 
        {
            count++;
        }
        statistics_array[index].grades_above_average = count;
    }
}
void calculate_below_average(ExamType statistics_array[], int index)
{
    int count = 0;
    for (int i = 0; i < statistics_array[index].num_grades; i++)
    {
        if (statistics_array[index].grades_array[index] < statistics_array[index].average_grade)
        {
            count++;
        }
        statistics_array[index].grades_below_average = count;
    }
}
void print_results(ExamType statistics_array[])
{
    for (int i = 0; i < 5; i++)
    {
        cout << "Analysis of exams in fall" << " " << statistics_array[i].semester_name << statistics_array[i].year<<endl;
        cout << endl;
        cout << "The number of grades above average are" << " " << statistics_array[i].grades_above_average<<endl;
        cout << "The number of grades above average are" << " " << statistics_array[i].grades_below_average<<endl;

    }
}

和输出:

Fall 2013 17
54
96
68
99
35
81
93
32
12
23
45
55
66
77
88
99
100
Spring 2014 10
99
48
22
41
66
80
91
55
83
92
Fall 2014 12
32
12
23
45
51
62
97
38
59
80
91
98
Spring 2015 20
93
41
60
80
90
55
88
99
32
12
23
45
55
66
77
88
99
100
99
98
Fall 2015 15
92
45
61
86
90
55
82
92
32
12
23
45
53
61
73
int j = 0; j < statistics_array[i].num_grades; j++) {
        myfile >> statistics_array[i].grades_array[j];
    }

input_data函数嵌套循环代码应根据上述修改。