【发布时间】:2013-12-07 00:35:21
【问题描述】:
所以我的项目是创建一个程序,该程序接受类似于以下的输入:
Boole, George 98 105 -1 -1 -1
Pascal, Blaise 63 48 92 92 92
Babbage, Charles 100 97 100 98 -1
Kepler, Johannes 75 102 100 -1 -1
Clown, Bozo 0 6 6 57 62
Fini, End -99 -99 -99 -99 -99
然后输出:
Student Submission Grade
Boole, George 2 105
Pascal, Blaise 3 92
Babbage, Charles 1 100
Kepler, Johannes 2 102
Clown, Bozo 5 62
我遇到了麻烦,因为我当前的代码可以成功编译它,但我的其他输入文件之一遵循不同的格式。我当前的代码:
int main()
{
ifstream infile;
ofstream outfile;
infile.open("./ProgGrades1.txt");
outfile.open("./GradeReporttest.txt");
string lastName, firstName;
int score1, score2, score3, score4, score5;
int max, location;
while(GetInput(infile, lastName, firstName, score1, score2, score3, score4,
score5))
{
if (score1 == -99)
break;
AnalyzeGrade(infile, lastName, firstName, score1, score2, score3,
score4, score5, max, location);
WriteOutput(infile, outfile, lastName, firstName, max, location);
cout << lastName << " " << firstName << " " << location << " " << max <<
endl;
}
infile.close();
outfile.close();
return 0;
}
int GetInput(ifstream& infile, string& lastName, string& firstName, int& score1,
int& score2, int& score3, int& score4, int& score5)
{
infile >> lastName >> firstName >> score1 >> score2 >> score3 >>
score4 >> score5;
return infile;
}
int AnalyzeGrade(ifstream& infile, string& lastName, string& firstName,
int& score1, int& score2, int& score3, int& score4, int& score5,
int& max, int& location)
{
int score[5];
max = 0;
score[0] = score1;
score[1] = score2;
score[2] = score3;
score[3] = score4;
score[4] = score5;
for (int i = 0; i < 5; i++)
{
if (score[i] > max)
{
max = score[i];
}
}
if (max == score[0])
{
location = 1;
}
else if (max == score[1])
{
location = 2;
}
else if (max == score[2])
{
location = 3;
}
else if (max == score[3])
{
location = 4;
}
else if (max == score[4])
{
location = 5;
}
else
{
}
fill_n(score, 6, 0);
return infile;
}
void WriteOutput(ifstream& infile, ofstream& outfile, string& lastName,
string& firstName, int& max, int& location)
{
string studentID = lastName + " " + firstName;
outfile << "\n" << setw(19) << studentID << setw(14) << location << " " <<
max;
}
我的其他输入文件如下所示:
Stroustrup, Bjarne 8 8 -1 -1 -1
Lovelace, Ada 1 60 14 43 -1
von Neumann, Jon 77 48 65 -1 -1
Wirth, Niklaus 51 59 -1 -1 -1
Wozniak, Steve 81 -1 -1 -1 -1
Babbage, Charles 31 92 -1 -1 -1
Hopper, Grace 76 -1 -1 -1 -1
Bird, Tweety -99 -99 -99 -99 -99
Sylvester 77 39 -1 -1 -1
所以这里的问题是我的 infile 流在两个字符串中,但在第 3 行,姓氏有两个部分,最后一行只有一个名字。我需要另一种方法来获取名称。
顺便说一句,我目前正在学习 C++ 课程,所以我的知识有限,但我对研究毫无疑虑。如您所见,我正在使用更多的入门级代码。尝试使用数组,但得出结论还是不明白如何成功传递。
【问题讨论】:
-
我的代码基本上得出了相同的结论。使用变量 lastName 和 firstName,我可以获取整个名称并将其作为一个字符串输出。第 3 行有逗号,但姓氏有两部分,所以会搞砸。
-
std::getline(infile, ',')将提取到第一个逗号的所有内容并删除逗号。也许你可以使用它。 -
这适用于第三行,但不适用于最后一行,因为没有逗号可停。