可能重复:
enhancing a program - complete failureC++阅读文本文件和输出等级和平均到另一个文件(搞砸输出)
IM要求写一个程序来读取的内容文本文件的形式为:
Jones Tom 94 99 96 74 56 33 65 89 87 85
Thompson Frank 67 58 86 95 47 86 79 64 76 45
Jackson Tom 95 97 94 87 67 84 99 45 99 87
Jackson Michael 43 23 34 77 64 35 89 56 75 85
Johnson Sara 84 93 64 57 89 99 74 64 75 35 91
并将每个学生的平均值输出到另一个fil中E在形式:
Jones Tom 94 99 96 74 56 33 65 89 87 85 77.8
Thompson Frank 67 58 86 95 47 86 79 64 76 45 70.3
Jackson Tom 95 97 94 87 67 84 99 45 99 87 85.4
Jackson Michael 43 23 34 77 64 35 89 56 75 85 58.1
Johnson Sara 84 93 64 57 89 99 74 64 75 35 73.4
我成功地管理,使用下面的代码来完成:
#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;
char c;
int lines=1;
double avg=0;
while(infile.get(c))
{if(c=='\n') lines++;}
infile.clear();
infile.seekg(0);
for(int k=0;k<lines;k++)
{
infile>>fname;
infile>>lname;
outfile<<fname<<" "<<lname<<" ";
int sum=0;
for(int i=0;i<10;i++)
{
if(infile>>grades)
{sum+=grades;
outfile<<grades<<" ";}
}
outfile<<(double)sum/10.0<<endl;
}
system("pause");
return 0;
}
,但我有一个问题。 当文本文件的第一行包含大于10小于例如年级:
琼斯汤姆94 99 96 74 56 33 65 89 87
我得到一个弄乱输出,这是毁了一切。即时获取输出如下:
Jones Tom 94 99 96 74 56 33 65 89 87 69.3
0
0
0
0
我该如何解决这个问题?以及如何让程序输出零,如果我在每行上少于十个等级? 使得例如,如果我有在第一行:
Jones Tom 94 99 96 74 56 33 65 89
我希望程序计算平均值和输出以下到另一个文件。
Jones Tom 94 99 96 74 56 33 65 89 0 0 64.3
注意64.3是学生的平均值。
谢谢。 亲切的问候。
我希望这不是功课!除此之外,我发现在阅读以'\ n'开头的行后你会打电话清楚。你会希望在检查空白行和空白行时更加小心。 – batbrat 2012-01-15 10:00:03
@batbrat:是的,这是作业。这是[前一个问题]的后续(http://stackoverflow.com/questions/8862058/enhance-a-program-complete-failure)。 – Blastfurnace 2012-01-15 10:17:53
@Blastfurnace谢谢你告诉我。我应该意识到它!也许我不应该发布这样一个详细的答案,并指出他更多的阅读,并推动他寻求解决方案。不幸的是,它已经完成了。 – batbrat 2012-01-15 10:25:28