c++ - 比较文件中的最佳平均成绩并打印学生的姓名
问题描述
我有一个 students.txt 文件:
Jim Heat 3 3 3.3
Joe Smith 4 4 3.7
...
如您所见,数据按顺序排序:姓名、姓氏、班级(1-4)、年级、平均成绩。我已经确定了档案中的学生总数,四年级学生的人数,成绩优异的学生的名字,但我仍然需要确定平均成绩最好的学生的名字。我不知道如何比较文件中的平均成绩,然后将学生的姓名与最好的平均成绩打印出来。
这是我的代码:
#define length 20
struct student{
char name[20];
char surname[20];
int class;
int grade;
float average_grade;
};
int main()
{int s,br=0;
ifstream input;
input.open("students.txt");
if (input) {
int number_of_students = 0;
string line;
while (getline(input, line))
++number_of_students;
cout << "Total number of students: " << number_of_students <<endl;
} else {
cout << "Could not open the file"<<endl;
}
input.close();
input.open("students.txt");
int i=0,br1=0;
float pr;
struct student arr[length];
while(input>>arr[i].name>>arr[i].surname>>arr[i].class>>arr[i].grade>>arr[i].average_grade && i<length)
if (arr[i].class==4)
{
br++;
}
cout<<"The number of fourth grader students "<<br<<endl;
input.close();
input.open("students.txt");
while(input>>arr[i].name>>arr[i].surname>>arr[i].class>>arr[i].grade>>arr[i].average_grade && i<length)
if(arr[i].grade>4)
{
cout<<"Student with excellent grade "<arr[i].name<<" "<<arr[i].surname<<endl;
}
input.close();
return 0;
}
解决方案
我会重载operator>>
以使输入更容易:
#define length 20
struct Student
{
char name[length]; // Should be std::string
char surname[length]; // Should be std::string
int class_id; // Changed because "class" is a keyword.
int grade;
float average_grade;
friend std::istream& operator>>(std::istream& input, Student& s);
};
std::istream& operator>>(std::istream& input, Student& s)
{
input >> s.name;
input >> s.surname;
input >> s.class_id;
input >> s.grade;
input >> s.average_grade;
return input;
}
现在您可以创建两个Student
实例,一个用于读入,另一个用于保持运行中的“最佳”平均成绩:
Student s;
Student best_grade;
best_grade.average_grade = 0.0;
while (input >> s)
{
if (s.average_grade > best_grade.average_grade)
{
best_grade = s;
}
}
具有最大值的学生average_grade
存储在Student
变量best_grade
中。循环后,您可以打印best_grade
.
推荐阅读
- java - 如何使用手写 JavaScript 中的 GWT 实例对象的 java 方法调用?
- acumatica - 网格中的复选框控件未触发 fieldupdated 事件
- mongodb - 如何聚合 2 个级别并保留文档?
- java - 属性顺序到属性文件 Java
- ios - Appium::TouchAction.new.tap 无法正常工作
- sql-server - SQL Server 中的精确长度列
- javascript - Vue.js / Vuex + axios 发送多个 PUT 请求
- php - Laravel sendmail 驱动程序不起作用。格式错误的 UTF-8 字符,可能编码不正确
- javascript - 如何在显示警报时使背景变暗并在警报关闭时关闭#dim?
- linux - 如何通过 SSH 将 Sudo 与 Jenkins bash 脚本一起使用?