【发布时间】:2012-01-15 09:50:00
【问题描述】:
我要求编写一个程序来读取文本文件的内容,格式如下:
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
并将每个学生的平均值输出到另一个文件中,格式为:
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' 开头的行后调用 clear 很奇怪。您需要更加小心地检查空行和空白行。
-
@batbrat:是的,这是作业。这是previous question的后续行动。
-
@Blastfurnace 感谢您告诉我。我应该意识到的!也许我不应该发布如此详细的答案并指出他更多阅读并推动他寻求解决方案。不幸的是,它已经完成了。