【发布时间】:2014-05-19 01:02:55
【问题描述】:
我应该声明一个包含未知数量学生姓名和成绩的结构。这是我的做法:
struct student {
char name[30];
int grade1, grade2, grade3;
};
然后,我有一个文本文件,其中包含不同行中每个学生的信息。我是这样读的。
student info[20];
int nr_students,i=0,k=0;
fstream inFile;
inFile.open("in.txt");
fstream outFile;
outFile.open("out.txt");
while(!EOF) {
inFile>>info[i].name;
inFile>>info[i].grade1;
inFile>>info[i].grade2;
inFile>>info[i].grade3;
i++;
}
nr_students=i;
avg_promovability(outFile,info, nr_students);
我认为这不能正常工作,因为 nr_students 显然仍然为 0。还有,第一个函数:
void avg_promovability(fstream &outFile,student *info, int nr_students)
{
int i;
float sum=0,j=0,avg;
for (i=0;i<nr_students;i++)
if(info[i].grade1 >=5 && info[i].grade2>=5 && info[i].grade3>=5 ) {
sum=sum + info[i].grade1 + info[i].grade2 + info[i].grade3;
j++;
}
avg=sum/(3*j);
outFile<<avg;
}
它应该计算通过的学生的平均成绩(即他们的所有成绩都> = 5)。它并没有真正做到这一点,out.txt 文件始终为空。关于我做错了什么的任何建议?
【问题讨论】:
-
while(!EOF)始终为 false,因为EOF是一个非零值的常量。相反,从文件中读取并检查这些读取是否有错误。 -
尽可能避免省略
{和},这可能会产生微妙的错误... Apple 在其 SSL 实现中的错误(又名 goto 失败)是由缺少花括号引起的开发者没有注意到。
标签: c++ file structure average