增强程序完全失败
enhancing a program - complete failure
大家好。我在想办法改进我的程序时遇到了一些麻烦。
问题是:
编写一个程序来计算某门课程的数字成绩。课程记录在一个文件中,该文件将用作输入文件。输入文件的格式如下:每行包含一个学生的姓氏,然后一个空格,然后是学生的名字,然后是一个空格。测验分数是整数,用一个空格隔开。您的程序将从该文件中获取输入,并将输出发送到第二个文件。输出文件中的数据将与输入文件中的相同,只是每行末尾将有一个额外的数字(类型为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
循环。
- libprotobuf 检查在 Mac OS 上执行程序时失败
- QDateTime::toString() 在退出处理程序中使用时失败
- 为什么我的Qt程序在断言失败后继续运行?
- 每次b/c程序无法加载级联时,使用harr级联的人脸识别都会失败
- C++ 错误的分配应用程序失败
- MXE Qt5 应用程序构建在 Docker 容器中失败
- 激活上下文生成失败,依赖程序集,并行,事件 ID 33
- arm_data在第二次运行我的程序时中止失败,然后
- 添加类型名会导致程序编译失败
- 将源文件扩展名从 .m 更改为 .mm 在屏幕保护程序项目的 Xcode 9.3 中失败
- Mongodb C驱动程序在Windows上安装失败
- C++编译器 g++.exe 无法编译简单的测试程序 - 确定 CXX 编译器是否工作失败
- 程序'main.exe'运行失败:指定的可执行文件不是此操作系统平台的有效应用程序
- 使用模拟器C++从RISC-V裸机程序调用printf系统调用时失败
- variadic模板折叠程序在GCC9中失败
- 由于程序停止工作,生成大量数字失败
- 基于CMAKE的CUDA应用程序的构建失败 - 没有传递给链接器的文件
- CMake 在尝试编译简单测试程序时失败
- 在一个简单的程序中断言失败 std::ispunct 中
- 具有指针类型成员的类在 MSVS2012@debug 下销毁时失败.程序错误或错误源