增强程序完全失败

enhancing a program - complete failure

本文关键字:失败 程序 增强      更新时间:2023-10-16

大家好。我在想办法改进我的程序时遇到了一些麻烦。

问题是:

编写一个程序来计算某门课程的数字成绩。课程记录在一个文件中,该文件将用作输入文件。输入文件的格式如下:每行包含一个学生的姓氏,然后一个空格,然后是学生的名字,然后是一个空格。测验分数是整数,用一个空格隔开。您的程序将从该文件中获取输入,并将输出发送到第二个文件。输出文件中的数据将与输入文件中的相同,只是每行末尾将有一个额外的数字(类型为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)部分。我尝试将grades[10]数组初始化为零,但没有得到任何正确的输出。有什么帮助吗?非常感谢。

在以下所有方面增强您为(问题10)编写的程序方式。

a每行的测验分数列表将包含10个或更少的测验得分。(如果测验分数少于10分,那就意味着学生错过了一次或多次测验。)平均得分为仍然是测验分数的总和除以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;
}

但当我运行这个程序时,我只得到了一个空白。我无法修复从文件的所有行读取的循环。

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

无论如何,我建议您逐行读取文件,然后使用ostringstream单独处理每一行。这样,检测到没有更多的分数跟随,与在第1部分中检测到没有学生跟随的方法相同。

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