Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c++;?_C++_Arrays_File_Struct_Stringstream - Fatal编程技术网

C++ 如何在c++;?

C++ 如何在c++;?,c++,arrays,file,struct,stringstream,C++,Arrays,File,Struct,Stringstream,我有一个程序,应该通过字符串流读取输入文件。该文件包含学生姓名和我想要平均的考试分数。该文件可以包含任何数量大于1且小于10的学生的任意数量的考试分数 如果我通过字符串流读取文件中的所有值,我将如何将每个测试分数值存储为一个整数,以便将它们相加?以下是我目前掌握的代码,我甚至不确定这些代码是否正确: string fname, lname, line; getline(cin, line); istringstream sin; sin.str(line); sin >>

我有一个程序,应该通过字符串流读取输入文件。该文件包含学生姓名和我想要平均的考试分数。该文件可以包含任何数量大于1且小于10的学生的任意数量的考试分数

如果我通过字符串流读取文件中的所有值,我将如何将每个测试分数值存储为一个整数,以便将它们相加?以下是我目前掌握的代码,我甚至不确定这些代码是否正确:

 string fname, lname, line;
 getline(cin, line);
 istringstream sin;
 sin.str(line);
 sin >> fname >> lname;
这是解析值的正确方法吗?在顶部,我声明了一个结构“student”,如下所示:

struct student {
  string first_name;
  string last_name;
  double avg_score;
} student1;

谢谢大家!

如果每一行的分数不同,我倾向于读完整的一行,然后逐一解析。因此,您可以依靠
>
-运算符返回
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;
            }
        }
    }
}
intmain(){
iff流(数据文件);
如果(f){
弦线;
while(getline(f,line)){
字符串fname,lname;
istringstream ss(线);
如果(ss>>fname>>lname){
双和=0;
双重价值;
整数计数=0;
while(ss>>值){
总和+=数值;
计数++;
}

cout如果需要存储多个数据,通常需要一个所谓的容器类。容器类可以存储任意数量的相同类型的数据,并提供管理容器元素的方法

C++中的标准容器类是 STD::vector < /C> >,因此,例如,在您的情况下,可以通过

定义容器
#include <vector>

std::vector<student> allStudents;

<> P>对于任何其他的东西,你最好先读一本初学者的C++教材,因为容器类的工作是C++程序员的基本技能。

为什么不使用<代码> CIN > fNe> > LNEY;< /Cord>?它做同样的事情。如果你显示更多的代码,如果你可以指向不知道该怎么做的那行,那么帮助你就更容易了。ase阅读关于@NathanOliver的文章:我认为这是因为一行可以包含任意数量的分数;所以我也会分别阅读每一行,因为它更清楚地表明每一行都被视为一个单独的“记录”。
allStudents.push_back(student1)