这是问题:
编写程序来计算课程的数字成绩。课程记录位于将用作输入文件的文件中。输入文件的格式完全如下:每行包含学生的姓氏,然后是一个空格,然后是学生的名字,然后是一个空格,然后是一行中的10个测验分数。测验分数是整数,并用一个空格分隔。您的程序将从此文件中获取其输入并将其输出发送到第二个文件。输出文件中的数据将与输入文件中的数据相同,只是每行末尾会有一个附加数字(类型为double)。这个数字将是学生十个测验分数的平均值。如果这是作为类分配完成的,请从教师那里获取文件名。使用至少一个将文件流作为其全部或部分参数的函数。
我成功完成了第一部分。下面是代码:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
fstream infile("grades.txt",ios::in);
if(!infile){cerr<<"file could not be found!";exit(1);}
fstream outfile("average.txt",ios::out);
if(!outfile){cerr<<"file could not be created!";exit(1);}
char fname[20];
char lname[20];
int grades[10];
char c;
int x;
cout<<"how many students?";
cin>>x;
for(int k=0;k<x;k++)
{
infile>>fname;
infile>>lname;
for(int i=0;i<10;i++)
infile>>grades[i];
outfile<<fname<<" "<<lname<<" ";
double sum=0;
for(int j=0;j<10;j++)
{
outfile<<grades[j]<<" ";
sum+=grades[j];
}
double avg=0;
avg=sum/10;
outfile<<avg<<endl;
}
system("pause");
return 0;
}
我无法完成第二部分的(a)部分。我尝试将等级[10]数组初始化为零,但我没有得到任何正确的输出。任何帮助?谢谢。
在以下所有内容中增强您为(问题10)编写的程序 方法。
a-每行的测验分数列表将包含十个较少的测验 分数。 (如果少于十个测验分数,则意味着 该学生错过了一个或多个测验。)平均分为 仍然是测验分数的总和除以10.这相当于 任何错过的测验给学生一个0。
b-输出文件将在开头包含一行(或多行) 解释输出的文件。使用格式说明 使布局整洁,易于阅读。 c-放置所需的 在输出文件中输出,程序将关闭所有文件然后 将“输出”文件的内容复制到“输入”文件中 净效果是改变输入文件的内容 使用至少两个具有全部或部分文件流的函数 他们的论点。如果这是作为课堂作业完成的, 从你的指令中获取文件名。
这是我的代码现在的样子
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
fstream infile("grades.txt",ios::in);
if(!infile){cerr<<"file could not be found!";exit(1);}
fstream outfile("average.txt",ios::out);
if(!outfile){cerr<<"file could not be created!";exit(1);}
char fname[20];
char lname[20];
int grades;
int sum=0;
int linecount=0;
char c;
while(!infile.eof())
{
infile>>lname;
infile>>fname;
outfile<<lname<<" "<<fname<<" ";
for(int i=0;i<10;i++){if(infile>>grades)outfile<<grades<<" ";else {outfile<<"0 ";break;} sum+=grades;}
outfile<<double(sum/10.0);
}
system("pause");
return 0;
}
但是当我运行程序时,我只是得到一个黑色的空间。我无法修复循环以从文件的所有行读取。
答案 0 :(得分:2)
从第一部分开始:您的代码并没有完全解决给定的问题。给出的问题并没有说你输入了许多学生,但你应该处理文件中的所有学生,无论他们有多少。此外,您忽略了该部分:“使用至少一个将文件流作为其全部或部分参数的函数。”
无论如何,我建议你逐行阅读文件,然后使用ostringstream
分别处理每一行。这样,检测到不再跟随成绩的方式与检测到第1部分中没有更多学生遵循的方式相同。
提示:查看流错误状态,尤其是fail
,并在第1部分中使用while
循环,在第2部分中使用break
。