主题:C++ 在做读取文档的时候输出处理遇到了瓶颈了...帮帮忙
/*
这是一个命令行程序
要求是写一个命令行程序去读取test.txt文档里面的资料输出学生成绩
文档每行头两个是姓和名 之后 是各个成绩 最后以为是任意负数,当做
循环结束的控制元素. 行数长度都不固定.
输出格式是
------------------------
学生姓名: mary lin
成绩: 40 60 50
mary lin, 平均 50, 成绩 F.
------------------------
学生姓名: andy chen
成绩: 60 70 80 90
mary lin, 平均 75, 成绩 C.
------------------------
学生姓名: andy chen
成绩: 60 70 80 90
mary lin, 你没有考试成绩.
------------------------
学生姓名: andy chen
成绩: 80 100
mary lin, 平均 90, 成绩 A.
------------------------
...等等...
我写的程序只可以完整读出第一个人的资料, 我从循环去做,但是失败了...
我应该怎么改写这个程序呢? ...希望有人可以帮忙...
试过使用getline, 但是一行里面又有string又有int, 不确定改怎么分开...
刚开始学C++, 还抓不到设计思路..
会不会是我已开始思路就走错了?
/////////////读取的test.txt内容////////////////////
mary lin 40 60 50 -1
andy chen 60 70 80 90 -2
jacky wang -4
leo he 80 100-7
/////////////////////////////////////////////////
*/
///////////////////////程式码////////////////////
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main ( )
{
string filelines ;
string firstName,lastName;
double Average = 0.0;
double total = 0.0;
char Grade;
int score[100];
cout < < "\n=================================================================";
cout < < "\n WilliamC's Grade Calculator";
cout < < "\n=================================================================";
cout < < "\nThis program will process test scores to provide individuals \nwith letter grades according to the following scale: ";
cout < < "\n=================================================================";
cout < < "\n 90 < average A";
cout < < "\n 80 < average <= 90 B";
cout < < "\n 67.5 < average <= 80 C";
cout < < "\n 55 < average <= 67.5 D";
cout < < "\n 0 <= average <= 55 F";
cout < < "\n=================================================================\n";
//////////////////////////////////////////////////////////////////////////////////////////
ifstream fin("test.txt");
while (!fin.eof()){ //尝试使用循环, 但是不确定可不可以用
getline(fin,line); //最大的问题点...我不知道怎么用getline
for (int k = 0; k < 100 ; k ++){
score[k] = -1;
} // 预防文档里有0分, 所以先设定成负数.
fin >> firstName >> lastName; // 取得一行的姓名
for (int j = 0;j < 100 ; j ++){
fin >> score[j];
} // 取得成绩数列
if(score[0] < 0){ // 没成绩时的处理
cout < < "Your name is : " < < firstName < < " " < < lastName < < '\n';
cout < < '\n' < < firstName < < " " < < lastName < < "You Do Not Have Any Score.";
}else{
cout < < "Your name is : " < < firstName < < " " < < lastName < < '\n';
cout < < "Your scores are : ";
int w = 0;
while(score[w] >= 0){ cout < < score[w] < < " "; total = total + score[w];w++;} //用for循环显示成绩数组
Average = total / w;
if ( Average > 90) // 计算成绩
Grade = 'A';
if (Average > 80)
Grade = 'B';
if (Average > 67.5)
Grade = 'C';
if (Average > 55)
Grade = 'D';
else
Grade = 'F';
cout < < '\n' < < firstName < < " " < < lastName < < ", your average is " < < Average < < " and your letter grade is " < < Grade; //输出
}
}
///////////////////////////////////////////////////////////////////////////////////////////
cout < < "=================================================================";
cout < < "\nThank you for using WilliamC's Grade Calculator.";
}
这是一个命令行程序
要求是写一个命令行程序去读取test.txt文档里面的资料输出学生成绩
文档每行头两个是姓和名 之后 是各个成绩 最后以为是任意负数,当做
循环结束的控制元素. 行数长度都不固定.
输出格式是
------------------------
学生姓名: mary lin
成绩: 40 60 50
mary lin, 平均 50, 成绩 F.
------------------------
学生姓名: andy chen
成绩: 60 70 80 90
mary lin, 平均 75, 成绩 C.
------------------------
学生姓名: andy chen
成绩: 60 70 80 90
mary lin, 你没有考试成绩.
------------------------
学生姓名: andy chen
成绩: 80 100
mary lin, 平均 90, 成绩 A.
------------------------
...等等...
我写的程序只可以完整读出第一个人的资料, 我从循环去做,但是失败了...
我应该怎么改写这个程序呢? ...希望有人可以帮忙...
试过使用getline, 但是一行里面又有string又有int, 不确定改怎么分开...
刚开始学C++, 还抓不到设计思路..
会不会是我已开始思路就走错了?
/////////////读取的test.txt内容////////////////////
mary lin 40 60 50 -1
andy chen 60 70 80 90 -2
jacky wang -4
leo he 80 100-7
/////////////////////////////////////////////////
*/
///////////////////////程式码////////////////////
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main ( )
{
string filelines ;
string firstName,lastName;
double Average = 0.0;
double total = 0.0;
char Grade;
int score[100];
cout < < "\n=================================================================";
cout < < "\n WilliamC's Grade Calculator";
cout < < "\n=================================================================";
cout < < "\nThis program will process test scores to provide individuals \nwith letter grades according to the following scale: ";
cout < < "\n=================================================================";
cout < < "\n 90 < average A";
cout < < "\n 80 < average <= 90 B";
cout < < "\n 67.5 < average <= 80 C";
cout < < "\n 55 < average <= 67.5 D";
cout < < "\n 0 <= average <= 55 F";
cout < < "\n=================================================================\n";
//////////////////////////////////////////////////////////////////////////////////////////
ifstream fin("test.txt");
while (!fin.eof()){ //尝试使用循环, 但是不确定可不可以用
getline(fin,line); //最大的问题点...我不知道怎么用getline
for (int k = 0; k < 100 ; k ++){
score[k] = -1;
} // 预防文档里有0分, 所以先设定成负数.
fin >> firstName >> lastName; // 取得一行的姓名
for (int j = 0;j < 100 ; j ++){
fin >> score[j];
} // 取得成绩数列
if(score[0] < 0){ // 没成绩时的处理
cout < < "Your name is : " < < firstName < < " " < < lastName < < '\n';
cout < < '\n' < < firstName < < " " < < lastName < < "You Do Not Have Any Score.";
}else{
cout < < "Your name is : " < < firstName < < " " < < lastName < < '\n';
cout < < "Your scores are : ";
int w = 0;
while(score[w] >= 0){ cout < < score[w] < < " "; total = total + score[w];w++;} //用for循环显示成绩数组
Average = total / w;
if ( Average > 90) // 计算成绩
Grade = 'A';
if (Average > 80)
Grade = 'B';
if (Average > 67.5)
Grade = 'C';
if (Average > 55)
Grade = 'D';
else
Grade = 'F';
cout < < '\n' < < firstName < < " " < < lastName < < ", your average is " < < Average < < " and your letter grade is " < < Grade; //输出
}
}
///////////////////////////////////////////////////////////////////////////////////////////
cout < < "=================================================================";
cout < < "\nThank you for using WilliamC's Grade Calculator.";
}