比较文件中的最佳平均成绩并打印学生的姓名
Comparing the best average grade from the file and print the student's name
>我有一个学生.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
字段。
就像您像优秀学生一样逐行遍历文件以确定其他值一样,同样逐行浏览文件以确定最高平均成绩,方法是将最大值最初存储到第一个元素,然后如果您遇到任何高于此的成绩,请将其存储为 max,并将该平均成绩的索引存储在找到它的位置,以便您可以输出名称对应于该等级。当您获得比以前更高的成绩时,相应地更新索引,然后您将存储的最终索引将是最高平均成绩和相应的学生姓名。
相关文章:
- 回溯C++不打印函数,因此文件
- 在gem5中打印文件中的所有cache_blocks
- 打印逐行存储的文本文件
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C/C++:打印(配置)头文件的内容
- 如何使代码打印文本文件中的第一行?
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 按单词搜索文件,然后在C++中打印特定行数
- C++ 尝试优化每一帧将数据打印到二进制文件
- 如何访问头文件中类的组件并打印它们的地址?
- 如何在c ++中以一行(水平)打印两个文件的数据?如给定的.这两种形式来自两个不同的文本文件
- 使用 fstream 库并在屏幕上打印的文件有问题?
- 如何在几个空行后打印文件中的输出
- 二进制文件以及如何对其采取行动(打印文件)
- C 获取目录路径,解析文件夹名称和来自Parent Directory的打印文件内容
- 打印文件中的文本
- 如何打印文件的内容
- 打印文件的分段故障特征
- 打印文件夹中的文件
- 用c++打印文件的第n列