IO流 [英] IO stream

查看:57
本文介绍了IO流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下问题,

我试图从文件中读取并输出到另一个文件。

但我没有得到完全预期的输出。


任何人都可以帮忙!

使用命名空间std;


void calculateAverage(double test1,double test2,double test3,double

test4,double test5,double& studentAverage);

int calculateGrade(double grade);


int main ()

{


string studentName;

int numberOfStudents = 0;

double classAverage = 0;

double studentAverage = 0;

double totalAverage = 0; //添加所有学生的平均值

平均值

char等级;

double test1,test2,test3,test4,test5;


ifstream inFile; //输入学生档案的流变量

ofstream outFile; //输出流变量

inFile.open(" c:\\studentFile.txt");

outFile.open(" c :\\Student_out.txt");


cout<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<

" Student" << setw(10)<< Test1

<< setw(8)<< " Test2的" << setw(8)<< " Test3的" << setw(8)<< Test4

<< setw(8)<< Test5

<< setw(8)<< "平均" << setw(8)<< "年级" << endl;


outFile<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<

" Student" << setw(10)<< Test1

<< setw(8)<< " Test2的" << setw(8)<< " Test3的" << setw(8)<< Test4

<< setw(8)<< Test5

<< setw(8)<< "平均" << setw(8)<< "年级" << endl;

if(!inFile)

{

cout<< 无法打开文件。 << endl;

返回1;

}


while(inFile)

{

outFile.setf(ios :: fixed,ios :: floatfield);

outFile.setf(ios :: showpoint);

outFile<< setprecision(2);


inFile>> studentName>> test1>> test2>> test3>> test4>> test5

;


计算平均值(test1,test2,test3,test4,test5,

studentAverage);
< br $> b $ b grade = calculateGrade(studentAverage);


cout<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<

studentName<< setw(10)<< test1

<< setw(8)<< test2<< setw(8)<< test3<< setw(8)<< test4

<< setw(8)<< test5<< setw(9)<< studentAverage<< setw(8)<<

grade<< endl;

outFile<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<

studentName<< setw(10)<< test1

<< setw(8)<< test2<< setw(8)<< test3<< setw(8)<< test4

<< setw(8)<< test5<< setw(9)<< studentAverage<< setw(8)<<

grade<< endl;


totalAverage = totalAverage + studentAverage;


numberOfStudents ++;

classAverage = totalAverage / numberOfStudents;

}

outFile<< endl<< setprecision(2)及LT;< 等级平均值是: <<

classAverage<< endl;


inFile.close();

outFile.close();


system("暂停);

返回0;

}


//计算平均值的函数

void calculateAverage(double test1,double test2,double test3,double

test4,double test5,double& studentAverage)

{


studentAverage = static_cast< double>(test1 + test2 + test3 + test4

+ test5)/ 5.0;


}


int calculateGrade(double studentAverage)

{

char grade;


if(studentAverage < = 100&& studentAverage> = 90)

grade =''A'';

else if(studentAverage< 90&& studentAverage > = 80)

grade =''B'';

else if(studentAverage< 80&& studentAverage> = 70)

grade =''C'';

else if(studentAverage< 70&& studen tAverage> = 60)

grade =''D'';

else if(studentAverage< 60&& studentAverage> = 0)

grade =''F'';

else

cout<< 无效成绩 <<结束;


返回等级;


}

I have the following question,
I am trying to read from a file and output to another file.
But I am not getting exactly the expected output.

Can anyone help please!
using namespace std;

void calculateAverage(double test1, double test2, double test3, double
test4, double test5, double& studentAverage);
int calculateGrade(double grade);

int main()
{

string studentName;
int numberOfStudents = 0;
double classAverage = 0;
double studentAverage = 0;
double totalAverage = 0; //To add the average of all student
averages
char grade;
double test1, test2, test3, test4, test5;

ifstream inFile; // input stream variable for the student file
ofstream outFile; // output stream variable

inFile.open("c:\\studentFile.txt");
outFile.open("c:\\Student_out.txt");

cout << setfill('' '') <<setiosflags(ios:: left) << setw(11) <<
"Student" << setw(10) << "Test1"
<< setw(8) << "Test2" << setw(8) << "Test3" << setw(8) << "Test4"
<< setw(8) << "Test5"
<< setw(8) << "Average" << setw(8) << "Grade" <<endl;

outFile << setfill('' '') <<setiosflags(ios:: left) << setw(11) <<
"Student" << setw(10) << "Test1"
<< setw(8) << "Test2" << setw(8) << "Test3" << setw(8) << "Test4"
<< setw(8) << "Test5"
<< setw(8) << "Average" << setw(8) << "Grade" << endl;
if (!inFile)
{
cout << "Unable to open the file." <<endl;
return 1;
}

while(inFile)
{
outFile.setf(ios::fixed, ios::floatfield);
outFile.setf(ios::showpoint);
outFile << setprecision(2);

inFile >> studentName >> test1 >> test2 >> test3 >> test4 >> test5
;

calculateAverage(test1, test2, test3, test4, test5,
studentAverage);

grade = calculateGrade(studentAverage);

cout << setfill('' '') << setiosflags(ios::left) << setw(11) <<
studentName << setw (10) << test1
<< setw(8) << test2 << setw(8) << test3 << setw(8) << test4
<< setw(8) << test5 << setw(9) << studentAverage << setw(8) <<
grade<<endl;
outFile << setfill('' '') << setiosflags(ios::left) << setw(11) <<
studentName << setw (10) << test1
<< setw(8) << test2 << setw(8) << test3 << setw(8) << test4
<< setw(8) << test5 << setw(9) << studentAverage << setw(8) <<
grade<<endl;

totalAverage = totalAverage + studentAverage;

numberOfStudents++;
classAverage = totalAverage / numberOfStudents;
}
outFile << endl << setprecision(2)<< "Class average is:" <<
classAverage << endl;

inFile.close();
outFile.close();

system("PAUSE");
return 0;
}

//function to calculate the average
void calculateAverage(double test1, double test2, double test3, double
test4, double test5, double& studentAverage)
{

studentAverage = static_cast<double>(test1 + test2 + test3 + test4
+ test5) / 5.0;

}


int calculateGrade(double studentAverage)
{
char grade;

if (studentAverage <= 100 && studentAverage >= 90)
grade = ''A'';
else if (studentAverage < 90 && studentAverage >= 80)
grade = ''B'';
else if (studentAverage < 80 && studentAverage >= 70)
grade = ''C'';
else if (studentAverage < 70 && studentAverage >= 60)
grade = ''D'';
else if (studentAverage < 60 && studentAverage >= 0)
grade = ''F'';
else
cout << "Invalid grade " << endl;

return grade;

}

推荐答案

oLgAa25写道:
oLgAa25 wrote:
我有以下问题,
我正在尝试从文件中读取并输出到另一个文件。
但我没有得到确切的结果预期的产出。


输出有什么问题?它中是否有随机字符?

计算值是否不正确?文件过早结束了吗?更多

特定于您的问题。

任何人都可以帮忙!


我将在下面做一些初步评论。

使用命名空间std;

void calculateAverage(double test1,double test2,double test3,double
test4,double test5,double& studentAverage);


为什么不返回平均值而不是通过引用传递它?

毕竟,你没有使用studentAverage的现有值。 br />
int calculateGrade(double grade);


为什么不返回一个字符而不是一个int?

int main()

字符串studentName;
int numberOfStudents = 0;
double classAverage = 0;
double studentAverage = 0;
double totalAverage = 0; //添加所有学生的平均值
char等级;
double test1,test2,test3,test4,test5;


在初始化和使用变量之前,不要声明变量。 C

要求您在范围的开头声明所有变量,但C ++
不需要。在C ++编程时更喜欢C ++习语。

ifstream inFile; //输入学生文件的流变量
ofstream outFile; //输出流变量

inFile.open(" c:\\studentFile.txt");
outFile.open(" c:\\Student_out.txt" );


更喜欢通过构造函数和析构函数打开和关闭:


ifstream inFile(" c:\\studentFile.txt" );

ofstream outFile(" c:\\Student_out.txt");


cout<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<
" Student" << setw(10)<< Test1
<< setw(8)<< " Test2的" << setw(8)<< " Test3的" << setw(8)<< Test4
<< setw(8)<< Test5
<< setw(8)<< "平均" << setw(8)<< "年级" << endl;

outFile<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<
" Student" << setw(10)<< Test1
<< setw(8)<< " Test2的" << setw(8)<< " Test3的" << setw(8)<< Test4
<< setw(8)<< Test5
<< setw(8)<< "平均" << setw(8)<< "年级" << endl;

if(!inFile)
{
cout<< 无法打开文件。 << endl;
返回1;
}


很好,但你没有查看文件,看它是否成功打开。

while(inFile)
{
outFile.setf(ios :: fixed,ios :: floatfield);
outFile.setf(ios :: showpoint);
outFile<< setprecision(2);

inFile>> studentName>> test1>> test2>> test3>> test4>> test5
;

computeAverage(test1,test2,test3,test4,test5,
studentAverage);

grade = calculateGrade(studentAverage);

cout<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<
studentName<< setw(10)<< test1
<< setw(8)<< test2<< setw(8)<< test3<< setw(8)<< test4
<< setw(8)<< test5<< setw(9)<< studentAverage<< setw(8)<<
grade<< endl;
outFile<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<
studentName<< setw(10)<< test1
<< setw(8)<< test2<< setw(8)<< test3<< setw(8)<< test4
<< setw(8)<< test5<< setw(9)<< studentAverage<< setw(8)<<
等级<< endl;

totalAverage = totalAverage + studentAverage;

numberOfStudents ++;


养成前缀表示法的习惯(参见
http://www.parashift.com/c++-faq-lit...tml#faq-13.15)

classAverage = totalAverage / numberOfStudents;


你不是说这条线在循环之外吗?

}

outFile<< endl<< setprecision(2)及LT;< 等级平均值是: <<<
classAverage<< endl;

inFile.close();
outFile.close();


不必要。析构函数为您完成此操作。为什么在你不需要的时候添加额外的代码?

系统(暂停);
返回0;
}

//计算平均值的函数
void calculateAverage(double test1,double test2,double test3,double
test4,double test5,double& studentAverage)
{

studentAverage = static_cast< double>(test1 + test2 + test3 + test4
+ test5)/ 5.0;

}

/> int calculateGrade(double studentAverage)
{char grade;

if(studentAverage< = 100&& studentAverage> = 90)
等级=''A'';
否则if(studentAverage< 90&& studentAverage> = 80)
grade ='''B'';
else if(studentAverage< 80&& studentAverage> = 70)
grade ='''C'';
如果(studentAverage< 70&& studentAverage> = 60)
年级=''D'';
如果(studentAverage< 60&& studentAverage> = 0)
grade =''F'';

cout<< 无效成绩 << ENDL;


如果执行了其他条件,则成绩未被初始化,但

返回给来电者。

返回成绩;

}
I have the following question,
I am trying to read from a file and output to another file.
But I am not getting exactly the expected output.
What is wrong with the output? Are there random characters in it? Are
the calculated values incorrect? Does the file end prematurely? Be more
specific in your question.

Can anyone help please!

I''ll make some preliminary comments below.

using namespace std;

void calculateAverage(double test1, double test2, double test3, double
test4, double test5, double& studentAverage);
Why not just return the average rather than passing it in by reference?
You''re not using the existing value of studentAverage, after all.
int calculateGrade(double grade);
Why not return a char instead of an int?

int main()
{

string studentName;
int numberOfStudents = 0;
double classAverage = 0;
double studentAverage = 0;
double totalAverage = 0; //To add the average of all student
averages
char grade;
double test1, test2, test3, test4, test5;
Don''t declare variables until you can initialize and use them. C
requires that you declare all variables at the start of scope, but C++
does not. Prefer C++ idioms when programming in C++.

ifstream inFile; // input stream variable for the student file
ofstream outFile; // output stream variable

inFile.open("c:\\studentFile.txt");
outFile.open("c:\\Student_out.txt");
Prefer to open and close via the constructor and destructor:

ifstream inFile("c:\\studentFile.txt");
ofstream outFile("c:\\Student_out.txt");


cout << setfill('' '') <<setiosflags(ios:: left) << setw(11) <<
"Student" << setw(10) << "Test1"
<< setw(8) << "Test2" << setw(8) << "Test3" << setw(8) << "Test4"
<< setw(8) << "Test5"
<< setw(8) << "Average" << setw(8) << "Grade" <<endl;

outFile << setfill('' '') <<setiosflags(ios:: left) << setw(11) <<
"Student" << setw(10) << "Test1"
<< setw(8) << "Test2" << setw(8) << "Test3" << setw(8) << "Test4"
<< setw(8) << "Test5"
<< setw(8) << "Average" << setw(8) << "Grade" << endl;
if (!inFile)
{
cout << "Unable to open the file." <<endl;
return 1;
}
Good, but you didn''t check outFile to see if it opened successfully.

while(inFile)
{
outFile.setf(ios::fixed, ios::floatfield);
outFile.setf(ios::showpoint);
outFile << setprecision(2);

inFile >> studentName >> test1 >> test2 >> test3 >> test4 >> test5
;

calculateAverage(test1, test2, test3, test4, test5,
studentAverage);

grade = calculateGrade(studentAverage);

cout << setfill('' '') << setiosflags(ios::left) << setw(11) <<
studentName << setw (10) << test1
<< setw(8) << test2 << setw(8) << test3 << setw(8) << test4
<< setw(8) << test5 << setw(9) << studentAverage << setw(8) <<
grade<<endl;
outFile << setfill('' '') << setiosflags(ios::left) << setw(11) <<
studentName << setw (10) << test1
<< setw(8) << test2 << setw(8) << test3 << setw(8) << test4
<< setw(8) << test5 << setw(9) << studentAverage << setw(8) <<
grade<<endl;

totalAverage = totalAverage + studentAverage;

numberOfStudents++;
Make a habit of prefix notation (see
http://www.parashift.com/c++-faq-lit...tml#faq-13.15).
classAverage = totalAverage / numberOfStudents;
Don''t you mean for this line to be outside the loop?
}
outFile << endl << setprecision(2)<< "Class average is:" <<
classAverage << endl;

inFile.close();
outFile.close();
Unnecessary. The destructor does this for you. Why add extra code when
you don''t need it?

system("PAUSE");
return 0;
}

//function to calculate the average
void calculateAverage(double test1, double test2, double test3, double
test4, double test5, double& studentAverage)
{

studentAverage = static_cast<double>(test1 + test2 + test3 + test4
+ test5) / 5.0;

}


int calculateGrade(double studentAverage)
{
char grade;

if (studentAverage <= 100 && studentAverage >= 90)
grade = ''A'';
else if (studentAverage < 90 && studentAverage >= 80)
grade = ''B'';
else if (studentAverage < 80 && studentAverage >= 70)
grade = ''C'';
else if (studentAverage < 70 && studentAverage >= 60)
grade = ''D'';
else if (studentAverage < 60 && studentAverage >= 0)
grade = ''F'';
else
cout << "Invalid grade " << endl;
If the else condition is executed, grade is left uninitialized but
returned to the caller.

return grade;

}




干杯! --M



Cheers! --M


哦谢谢你,但我们还不是建设者和破坏者

Oh thank you, but we are not at the constructors and destructors yet


输出有什么问题?它中是否有随机字符?

计算值是否不正确?文件过早结束了吗?更多


特定于您的问题。


这是错误的

我会在这里发布


学生测试1测试2测试3测试4测试5平均成绩

Balto85.00 83.00 77.00 91.00 76.00 82.40 B

Mickey80.00 90.00 95.00 93.00 48.00 81.20 B

Minnie79.00 81.00 11.00 90.00 73.00 66.80 D

Doc92.00 83.00 30.00 69.00 87.00 72.20 C

Goofy23.00 45.00 96.00 38.00 59.00 52.20 F

Duckey60.00 85.00 45.00 39.00 67.00 59.20 F

Grumby27.00 31.00 52.00 74.00 83.00 53.40 F

Sunny93.00 94.00 89.00 77.00 97.00 90.00 A

Piggy79.00 85.00 28.00 93.00 82.00 73.40 C

Pluto85.00 72.00 49.00 75.00 63.00 68.80 D

Pluto85.00 72.00 49.00 75.00 63.00 68.80 D


等级averag e是:69.85


这是我的原始文件


Balto 85 83 77 91 76

米妮79 81 11 90 73

Doc 92 83 30 69 87

高飞23 45 96 38 59

Duckey 60 85 45 39 67

格鲁比27 31 52 74 83

晴天93 94 89 77 97

小猪79 85 28 93 82

冥王星85 72 49 75 63

为什么冥王星打印两次?


和无效功能,这是问题的要求。


// ************************* ************************* ************************* ******

//编写一个程序,将学生的姓名与他或她的
考试一起读取*

//分数然后该程序应计算每个学生的平均考试成绩* b $ b $

//并分配适当的成绩。年级等级如下:

*

// 90-100,A; 80-89,B; 70-79,C; 60-69,D; 0-59,F。

*

//您的程序必须使用以下功能:

*

//

*

// a。 void函数calculateAverage,用于确定每个学生的平均测试分数。* b
/ b
测试分数。使用循环读取并总结五个
测试分数*

//此函数不输出平均测试分数。那个任务

必须在函数main中完成*

//

*

//

*

// b。一个值返回函数calculateGrade,用于确定并返回

每个*

//学生的成绩。此功能无法输出等级。那个

任务必须是*

//在函数main中完成)

*

// ** ************************************************ ** *******************************

*


#include < iostream.h>

#include< stdlib.h>

#include< iomanip>

#include< string>

#include< fstream>


使用命名空间std;


void calculateAverage(double test1,double test2 ,double test3,double

test4,double test5,double& studentAverage);

char calculateGrade(double grade);


int main()

{


string studentName;

int numberOfStudents = 0;

double classAverage = 0;

double studentAverage = 0;

double totalAverage = 0; //添加所有学生的平均值

平均值

char等级;

double test1,test2,test3,test4,test5;


ifstream inFile; //输入学生档案的流变量

ofstream outFile; //输出流变量

inFile.open(" c:\\studentFile.txt");

outFile.open(" c :\\Student_out.txt");


cout<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<

" Student" << setw(10)<< Test1

<< setw(8)<< " Test2的" << setw(8)<< " Test3的" << setw(8)<< Test4

<< setw(8)<< Test5

<< setw(8)<< "平均" << setw(8)<< "年级" << endl;


outFile<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<

" Student" << setw(10)<< Test1

<< setw(8)<< " Test2的" << setw(8)<< " Test3的" << setw(8)<< Test4

<< setw(8)<< Test5

<< setw(8)<< "平均" << setw(8)<< "年级" << endl;

if(!inFile)

{

cout<< 无法打开文件。 << endl;

返回1;

}


while(inFile)

{

outFile.setf(ios :: fixed,ios :: floatfield);

outFile.setf(ios :: showpoint);

outFile<< setprecision(2);


inFile>> studentName>> test1>> test2>> test3>> test4>> test5

;


计算平均值(test1,test2,test3,test4,test5,

studentAverage);
< br $> b $ b grade = calculateGrade(studentAverage);


cout<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<

studentName<< setw(10)<< test1

<< setw(8)<< test2<< setw(8)<< test3<< setw(8)<< test4

<< setw(8)<< test5<< setw(9)<< studentAverage<< setw(8)<<

grade<< endl;

outFile<< setfill(''')<< setiosflags(ios :: left)<< setw(11)<<

studentName<< setw(10)<< test1

<< setw(8)<< test2<< setw(8)<< test3<< setw(8)<< test4

<< setw(8)<< test5<< setw(9)<< studentAverage<< setw(8)<<

grade<< endl;


totalAverage = totalAverage + studentAverage;


numberOfStudents ++;

// classAverage = totalAverage / numberOfStudents;

}

classAverage = totalAverage / numberOfStudents;

outFile<< endl<< setprecision(2)及LT;< 等级平均值是: <<

classAverage<< endl;


inFile.close();

outFile.close();


system("暂停);

返回0;

}


//计算平均值的函数

void calculateAverage(double test1,double test2,double test3,double

test4,double test5,double& studentAverage)

{


studentAverage = static_cast< double>(test1 + test2 + test3 + test4

+ test5)/ 5.0;


}


char calculateGrade(double studentAverage)

{

char grade;


if(studentAverage < = 100&& studentAverage> = 90)

grade =''A'';

else if(studentAverage< 90&& studentAverage > = 80)

grade =''B'';

else if(studentAverage< 80&& studentAverage> = 70)

grade =''C'';

else if(studentAverage< 70&& stude ntAverage> = 60)

grade =''D'';

else if(studentAverage< 60&& studentAverage> = 0)

grade =''F'';

else

cout<< 无效成绩 <<结束;


返回等级;


}

What is wrong with the output? Are there random characters in it? Are
the calculated values incorrect? Does the file end prematurely? Be more

specific in your question.

Here is what is wrong
I will post it here

Student Test1 Test2 Test3 Test4 Test5 Average Grade
Balto85.00 83.00 77.00 91.00 76.00 82.40 B
Mickey80.00 90.00 95.00 93.00 48.00 81.20 B
Minnie79.00 81.00 11.00 90.00 73.00 66.80 D
Doc92.00 83.00 30.00 69.00 87.00 72.20 C
Goofy23.00 45.00 96.00 38.00 59.00 52.20 F
Duckey60.00 85.00 45.00 39.00 67.00 59.20 F
Grumby27.00 31.00 52.00 74.00 83.00 53.40 F
Sunny93.00 94.00 89.00 77.00 97.00 90.00 A
Piggy79.00 85.00 28.00 93.00 82.00 73.40 C
Pluto85.00 72.00 49.00 75.00 63.00 68.80 D
Pluto85.00 72.00 49.00 75.00 63.00 68.80 D

Class average is:69.85

and here is my original file

Balto 85 83 77 91 76
Mickey 80 90 95 93 48
Minnie 79 81 11 90 73
Doc 92 83 30 69 87
Goofy 23 45 96 38 59
Duckey 60 85 45 39 67
Grumby 27 31 52 74 83
Sunny 93 94 89 77 97
Piggy 79 85 28 93 82
Pluto 85 72 49 75 63

Why is Pluto printed out twice?

and for the void function, That s the requirement of the question.

//************************************************** *******************************
// Write a program that reads a student''s name together with his or her
test *
// scores. The program should then compute the average test score for
each student*
// and assign the appropriate grade. The grade scale is as follows:
*
// 90-100, A; 80-89, B ; 70-79, C; 60-69, D; 0-59, F.
*
// Your program must use the following functions:
*
//
*
//a. A void function, calculateAverage, to determine the average of the
five *
// test score for each student. Use a loop to read and sum the five
test score *
// This function doesn''t output the average test score. That task
must be done *
// in the function main)
*
//
*
// b. A value return function, calculateGrade, to determine and return
each *
// student''s grade. This function doesn''t output the grade. That
task must be *
// done in the function main)
*
//************************************************** *****************************
*

#include <iostream.h>
#include <stdlib.h>
#include <iomanip>
#include <string>
#include <fstream>

using namespace std;

void calculateAverage(double test1, double test2, double test3, double
test4, double test5, double& studentAverage);
char calculateGrade(double grade);

int main()
{

string studentName;
int numberOfStudents = 0;
double classAverage = 0;
double studentAverage = 0;
double totalAverage = 0; //To add the average of all student
averages
char grade;
double test1, test2, test3, test4, test5;

ifstream inFile; // input stream variable for the student file
ofstream outFile; // output stream variable

inFile.open("c:\\studentFile.txt");
outFile.open("c:\\Student_out.txt");

cout << setfill('' '') <<setiosflags(ios:: left) << setw(11) <<
"Student" << setw(10) << "Test1"
<< setw(8) << "Test2" << setw(8) << "Test3" << setw(8) << "Test4"
<< setw(8) << "Test5"
<< setw(8) << "Average" << setw(8) << "Grade" <<endl;

outFile << setfill('' '') <<setiosflags(ios:: left) << setw(11) <<
"Student" << setw(10) << "Test1"
<< setw(8) << "Test2" << setw(8) << "Test3" << setw(8) << "Test4"
<< setw(8) << "Test5"
<< setw(8) << "Average" << setw(8) << "Grade" << endl;
if (!inFile)
{
cout << "Unable to open the file." <<endl;
return 1;
}

while(inFile)
{
outFile.setf(ios::fixed, ios::floatfield);
outFile.setf(ios::showpoint);
outFile << setprecision(2);

inFile >> studentName >> test1 >> test2 >> test3 >> test4 >> test5
;

calculateAverage(test1, test2, test3, test4, test5,
studentAverage);

grade = calculateGrade(studentAverage);

cout << setfill('' '') << setiosflags(ios::left) << setw(11) <<
studentName << setw (10) << test1
<< setw(8) << test2 << setw(8) << test3 << setw(8) << test4
<< setw(8) << test5 << setw(9) << studentAverage << setw(8) <<
grade<<endl;
outFile << setfill('' '') << setiosflags(ios::left) << setw(11) <<
studentName << setw (10) << test1
<< setw(8) << test2 << setw(8) << test3 << setw(8) << test4
<< setw(8) << test5 << setw(9) << studentAverage << setw(8) <<
grade<<endl;

totalAverage = totalAverage + studentAverage;

numberOfStudents++;
//classAverage = totalAverage / numberOfStudents;
}
classAverage = totalAverage / numberOfStudents;

outFile << endl << setprecision(2)<< "Class average is:" <<
classAverage << endl;

inFile.close();
outFile.close();

system("PAUSE");
return 0;
}

//function to calculate the average
void calculateAverage(double test1, double test2, double test3, double
test4, double test5, double& studentAverage)
{

studentAverage = static_cast<double>(test1 + test2 + test3 + test4
+ test5) / 5.0;

}


char calculateGrade(double studentAverage)
{
char grade;

if (studentAverage <= 100 && studentAverage >= 90)
grade = ''A'';
else if (studentAverage < 90 && studentAverage >= 80)
grade = ''B'';
else if (studentAverage < 80 && studentAverage >= 70)
grade = ''C'';
else if (studentAverage < 70 && studentAverage >= 60)
grade = ''D'';
else if (studentAverage < 60 && studentAverage >= 0)
grade = ''F'';
else
cout << "Invalid grade " << endl;

return grade;

}


这篇关于IO流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆