学会使用结构体:
#include<fstream>
#include<iomanip>
#include<iostream>
using namespace std;
struct Student
{
char num[14];//定义char num[12]会把姓名保存下来,为什么?
char name[4];
float cpp;
float math;
float english;
float score;
};
int main()
{
Student stu[180];
Student t,
*p=stu;
int i,j;
float k;
ifstream infile("score.txt",ios::in);
if (!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for(i=0;i<180;i++)
{
infile>>stu[i].num>>stu[i].name>>stu[i].cpp>>stu[i].math>>stu[i].english;
stu[i].score=stu[i].cpp+stu[i].math+stu[i].english;
}
infile.close();
for(i = 0; i < 179; i++) //冒泡排序
{
if(stu[i].score < stu[i+1].score)
{
t=*(p+i);//stu[i];
//stu[i] = stu[i + 1];
*(p+i)=*(p+i+1);
// stu[i] = t;
*(p+i+1)=t;
k = stu[i].score;
stu[i].score =stu[i+1].score;
stu[i+1].score = k;
}
}
cout << "学号" << " " << "姓名 " << "C++" <<'\t'<< "高数" << "\t" << "英语" <<" "<<"总成绩" <<endl;
for(i = 0; i < 180; i++)
{
//cout <<stu[i].num;
cout <<setiosflags(ios::right)<<stu[i].num<<'\t'<<setw(8)<<stu[i].name <<setw(5)<< stu[i].cpp <<setw(7)<< stu[i].math<< setw(7) << stu[i].english << setw(7)<< stu[i].score << endl;
}
cout <<"可以获得奖学金的名单是:"<<endl;
for(i = 0, j = 0; j < 30; i++)
{
if((stu[i].cpp > 60) && (stu[i].math > 60) && (stu[i].english > 60))
{
j++;
cout << stu[i].name <<'\t';
}
while(j == 30)
{
for(; i < 180-1;)
{
if(stu[i].score == stu[i+1].score)
{
i++;
cout <<stu[i].name<<'\t';
}
else break;
}
}
}
return 0;
}
