C++ 运行此程序时的垃圾数据(学生记录程序)

C++ 运行此程序时的垃圾数据(学生记录程序),c++,C++,首先,这是我自己的代码,不是复制的 该程序应该从一个“grades.txt”文件中读取学生数据,该文件包含测验、期末考试等的分数,并计算平均数,分配分数,写下通过和未通过“pass.txt”和“fail.txt”的学生的姓名和分数。 现在我面临的问题是学生总数是57人。该程序最多可以为39名学生正确编写内容,但之后总是垃圾值:( #包括 #包括 #包括 #包括 #包括 使用名称空间std; int counter;//计算学生人数 结构学生 { 字符串名; 字符串lastname; 长ID号码;

首先,这是我自己的代码,不是复制的

该程序应该从一个“grades.txt”文件中读取学生数据,该文件包含测验、期末考试等的分数,并计算平均数,分配分数,写下通过和未通过“pass.txt”和“fail.txt”的学生的姓名和分数。 现在我面临的问题是学生总数是57人。该程序最多可以为39名学生正确编写内容,但之后总是垃圾值:(

#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int counter;//计算学生人数
结构学生
{
字符串名;
字符串lastname;
长ID号码;
int quiz1;//10%
int quiz2;//10%
int mid1;//15%
int mid2;//15%
双重作业;//10%
双决赛;//40%
双倍平均;//待计算
字符等级;//待计算
};
void Stcounter()
{
ifstream thing(“Grades.txt”);
虚拟字符串;
getline(thing,dummy);//用于跳过第一行
弦线;
int b=0;
while(getline(东西,行))
b++;
计数器=b;
coutrecord[i].lastname>>记录[i].quiz1>>记录[i].quiz2>>记录[i].mid1>>记录[i].mid2>>记录[i].作业>>记录[i].Final)
a=(记录[i].quiz1/10)+(记录[i].quiz2/10)+(记录[i].mid1*15)/100)+(记录[i].mid2*15)/100)+(记录[i].WORKIM/10)+(记录[i].Final*40)/100);
记录[i]。平均值=a;
如果(a>=85)
{
记录[i],成绩为A级;
}
否则,如果(a>=70)
{
记录[i]。等级为B级;
}
如果(a>=55),则为else
{
记录[i]。等级=C';
}
如果(a>=40),则为else
{
记录[i]。成绩为D级;
}
其他的
{
记录[i]。等级=F';
}
}
}
无效写入文件(学生记录[57])
{
流p,f;
p、 打开(“Pass.txt”);
f、 打开(“Fail.txt”);
对于(int i=0;i=40)
{

p如果你在If声明中没有注意到

float a;
if(beggar>>record[i].idnumber>>record[i].firstname>>record[i].lastname>>record[i].quiz1>>record[i].quiz2>>record[i].mid1>>record[i].mid2>>record[i].homework>>record[i].Final)
    a=(record[i].quiz1/10)+(record[i].quiz2/10)+((record[i].mid1*15)/100)+((record[i].mid2*15)/100)+(record[i].homework/10)+((record[i].Final*40)/100);
record[i].average=a;

使用变量“a”时未初始化,这会给您带来一个错误。因此,当您将a声明为浮点时,是否将其分配给0或其他对象

您是否尝试使用调试器单步执行代码?我强烈建议您使用
std::vector
而不是数组。它们更易于管理并传递给函数。@Algirdas p我使用了reidžius,我使用代码块作为我的IDE,还使用了更新版本的DevC++(由Orwell提供)。它没有显示任何错误。H,您应该确实需要一些时间来显示。只要您跟踪实际读取的记录数,大小可以更小,也可以更大。要做到这一点,您需要从
read
函数返回记录数。并且您需要处理文件结尾(和错误)正确地检查。我没有面临任何构建错误,如果你想说的话。
float a;
if(beggar>>record[i].idnumber>>record[i].firstname>>record[i].lastname>>record[i].quiz1>>record[i].quiz2>>record[i].mid1>>record[i].mid2>>record[i].homework>>record[i].Final)
    a=(record[i].quiz1/10)+(record[i].quiz2/10)+((record[i].mid1*15)/100)+((record[i].mid2*15)/100)+(record[i].homework/10)+((record[i].Final*40)/100);
record[i].average=a;