我有一个应该通过字符串流读取输入文件的程序。该文件包含学生姓名和我想要平均的考试成绩。该文件可以包含任意数量的大于1且小于10的学生的任意数量的考试成绩。
如果我按字符串流读取文件中的所有值,我如何将每个测试分数值存储为可以求和的整数?这是我到目前为止的代码,我不确定是否正确:
string fname, lname, line;
getline(cin, line);
istringstream sin;
sin.str(line);
sin >> fname >> lname;
这是解析值的正确方法吗?在顶部,我宣布了一个像这样的结构“学生”:
struct student {
string first_name;
string last_name;
double avg_score;
} student1;
谢谢!
答案 0 :(得分:0)
如果每一行的分数变化,我倾向于在完整的行中阅读并一个接一个地解析它们。因此,一旦不能在一行中读取分数,您可以依靠>>
- 运算符返回false
。所以我认为你是正确的方式。请参阅以下代码,演示如何处理>>
的返回值:
int main() {
ifstream f(DATAFILE);
if(f) {
string line;
while (getline(f,line)) {
string fname,lname;
istringstream ss(line);
if (ss >> fname >> lname) {
double sum = 0;
double value;
int count = 0;
while (ss >> value) {
sum += value;
count++;
}
cout << line << " gives average: " << sum/count << endl;
}
}
}
}
将值存储在struct
中是直截了当的(并留给您:-))。万一你遇到麻烦请问。
希望它有所帮助。
答案 1 :(得分:0)
如果您需要存储多个数据,通常需要一个所谓的容器类。容器类可以存储任意数量的相同类型的数据,并提供管理容器元素的方法。
C ++中的标准容器类是std::vector
,因此,例如,在您的情况下,您可以通过
#include <vector>
std::vector<student> allStudents;
添加student1
的数据
allStudents.push_back(student1)
对于其他任何事情,你最好阅读初学者的C ++教科书,因为使用容器类是C ++程序员的基本技能。