【发布时间】:2014-01-29 17:49:39
【问题描述】:
我正在编写一个程序,它接收输入并将其格式化为“名称分数”的分数。 这是需要做的事情“这是Moonglow的格式。
文本文件由单词组成。如果一个词是一个数字,那么这就是学生在一个问题上的分数,所以你将它添加到学生的考试分数中。
-
如果单词不是数字,而是单词“NAME”,那么下一个单词是学生的名字(Moonglow 只使用名字——姓氏是公司的和非个人的)。
如果单词是“AVERAGE”,那么您将开始读取数字,直到您读取到一个不是数字的单词(或者是文件的结尾)。您将所有这些数字平均并将其添加到分数中。由于 Moonglow 有点杂乱无章,因此有时数字不会跟随“AVERAGE”。在这种情况下,您忽略“平均”。 "
我的问题是我不知何故进入了一个无限循环,并且花了几个小时试图解决这个问题。这是一个非常简单的程序,我似乎无法让它工作!
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <stdlib.h>
using namespace std;
int main()
{
string s, name = "test";
string buffer;
double qScore, eScore, totalExam = 0, grade = 0, numExam = 0, finalGrade, avg = 0;
while (!cin.eof())
{
if (cin >> qScore)
{
if (cin.fail())
{
cin.clear();
}
else
{
grade += qScore;
}
}
else if (cin >> s)
{
if (s == "NAME")
{
cin >> s;
s = name;
}
else if (s == "AVERAGE")
{
while (cin >> eScore)
{
numExam++;
totalExam += eScore;
}
cin.clear();
}
}
}
if (numExam == 0)
{
avg = 0;
}
else
{
avg = (totalExam / numExam);
}
finalGrade = avg + grade;
cout << name << " " << finalGrade << endl;
return 0;
}
// end of main
【问题讨论】:
-
我应该用 while (cin >> qScore || cin >> s) 替换它吗?
-
将其替换为
while (cin >> qScore && cin >> s)。你还可以做更多的事情来修复这个程序。这只是一个。 -
我看到我的代码的另一个严重错误是没有任何内容被读入“名称”。无论我执行什么,输出中都没有给出名称。
-
1:和2:是输入的一部分吗?
标签: c++ string cout cin stringstream