运行此程序时的垃圾数据(学生记录程序)
Garbage data when running this program (Student record program)
首先,这是我自己的代码,不是复制的。
该程序应该从"成绩.txt"文件中读取学生数据,该文件包含测验,期末考试等标记,并计算平均值,分配成绩,并写下通过和失败的学生姓名和成绩"通过.txt"和"失败.txt"。现在我面临的问题是学生总数是57人。该程序为多达 39 名学生正确执行内容,但在此之后始终是垃圾值:(
#include <iostream>
#include <string>
#include <cmath>
#include <fstream>
#include <cstdlib>
using namespace std;
int counter; //counts the number of students
struct STUDENT
{
string firstname;
string lastname;
long idnumber;
int quiz1; //10%
int quiz2; //10%
int mid1; //15%
int mid2; //15%
double homework; //10%
double Final; //40%
double average; //to be calculated
char grade; //to be calculated
};
void Stcounter()
{
ifstream thing ("Grades.txt");
string dummy;
getline(thing,dummy); //for skipping the first line
string line;
int b=0;
while(getline(thing, line))
b++;
counter=b;
cout<<"Total number of students is "<< counter<<endl;
}
void read( STUDENT record[57])
{
float a;
ifstream thing("Grades.txt");
string d;
getline(thing,d);
for(int i=0;i<56;i++)
{
if( thing>> 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;
if(a>=85)
{
record[i].grade='A';
}
else if(a>=70)
{
record[i].grade='B';
}
else if(a>=55)
{
record[i].grade='C';
}
else if(a>=40)
{
record[i].grade='D';
}
else
{
record[i].grade='F';
}
}
}
void WriteToFile (STUDENT record[57])
{
ofstream p, f;
p.open("Pass.txt");
f.open("Fail.txt");
for (int i = 0; i <= 56; i++)
{
if (record[i].average >= 40)
{
p << record[i].idnumber << " " << record[i].firstname << " " << record[i].lastname << " passed with grade " << record[i].grade <<endl;
}
else
f << record[i].idnumber << " " << record[i].firstname << " " << record[i].lastname << " has failed"<<endl;
}
p.close();
f.close();
}
//This function counts how many students got a certain grade
void gradecount(STUDENT record[57])
{
int c1=0,c2=0,c3=0,c4=0,c5=0;
for(int i=0;i<57;i++)
{
if (record[i].grade=='A')
c1++;
else if(record[i].grade=='B')
c2++;
else if(record[i].grade=='C')
c3++;
else if(record[i].grade=='D')
c4++;
else
c5++;
}
cout<<c1<<" students got A"<<endl;
cout<<c2<<" students got B"<<endl;
cout<<c3<<" students got C"<<endl;
cout<<c4<<" students got D"<<endl;
cout<<c5<<" students got F"<<endl;
}
int main()
{
STUDENT record[57];
read(record);
WriteToFile (record);
Stcounter();
gradecount(record);
return 0;
}
如果你没有注意到你的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 或其他东西
相关文章:
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- 逐行跟踪和记录 c++ 程序的执行
- 使用完美记录进行分析Linux应用程序
- 在不存在的记录上调用 remove 会使程序崩溃
- 在后台记录 Eclipse IDE 调用的应用程序列表
- CUDA 程序不测量执行时间:cuda事件记录
- 尝试将数据从记录读取到程序(C++)时难以捉摸的错误
- 多线程应用程序中的独立日志记录
- 运行此程序时的垃圾数据(学生记录程序)
- 如何使用doxygen记录应用程序源文件
- 尝试在hash_map中查找记录时应用程序崩溃
- 无法从我创建的 c 二进制程序中删除记录
- 程序不计算记录数
- c++ 从文件中读取双倍,但如果程序遇到字符串,则记录
- 流记录程序VLC
- 这是C ++程序领域中最流行的开源日志记录软件/程序
- 为什么我的程序最多只能编译 16 条记录
- 正在比较标头记录值和读取程序崩溃的行数.C++
- 一个简单的PC应用程序制造商的数据记录应用程序
- 在 C++11 应用程序中进行错误日志记录的优雅方法