加强计划 - 彻底失败

时间:2012-01-14 11:58:07

标签: c++ file text

大家好日子。 我在试图弄清楚如何改进我的程序方面遇到了一些麻烦。

这是问题:

编写程序来计算课程的数字成绩。课程记录位于将用作输入文件的文件中。输入文件的格式完全如下:每行包含学生的姓氏,然后是一个空格,然后是学生的名字,然后是一个空格,然后是一行中的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;
}

但是当我运行程序时,我只是得到一个黑色的空间。我无法修复循环以从文件的所有行读取。

1 个答案:

答案 0 :(得分:2)

从第一部分开始:您的代码并没有完全解决给定的问题。给出的问题并没有说你输入了许多学生,但你应该处理文件中的所有学生,无论他们有多少。此外,您忽略了该部分:“使用至少一个将文件流作为其全部或部分参数的函数。”

无论如何,我建议你逐行阅读文件,然后使用ostringstream分别处理每一行。这样,检测到不再跟随成绩的方式与检测到第1部分中没有更多学生遵循的方式相同。

提示:查看流错误状态,尤其是fail,并在第1部分中使用while循环,在第2部分中使用break