尝试使用C++的PEEK从文件中获取代码行

尝试使用C++的PEEK从文件中获取代码行,c++,file,peek,C++,File,Peek,我尝试使用peek从文件中只获取一行特定的数据,然后将该行中的值放入数据类型中 for(int i = 0; i < students.length(); i++) { int q = 0; fin >> name; students[i].n = name; while(fin.peek() != '\n') { students[i].tests.resize(students[i].tests.length()+1)

我尝试使用peek从文件中只获取一行特定的数据,然后将该行中的值放入数据类型中

for(int i = 0; i < students.length(); i++)
{
    int q = 0;
    fin >> name;
    students[i].n = name;
    while(fin.peek() != '\n')
    {
        students[i].tests.resize(students[i].tests.length()+1);
        fin >> test;
        students[i].tests[q] = test;
        q++;
    }

Peek从来并没有真正向我解释过,我该如何改变它,从而有效地调整学生[I]的大小。测试到我在文件的特定行中有多少个数字?此时,它似乎正在无限地调整大小。

如果换行符前有空格,代码将无法工作,并且在到达文件末尾时将无限地循环

更好的做法是使用std::istringstream解析出数字,并将它们推回到测试向量上:


嗯,你读过我的工作吗?你们可能不想用它来读这行。即使你这么做了,这也是不可能的。您很可能需要更改整个代码才能使用。如果你不明白,我可以在回答中详细说明为什么你不能偷看一行,但方法无论如何都需要改变,所以我不知道它是否有任何价值。每行都有一个名称形式的字符串,然后是与考试分数相对应的不同数量的数字,如何使用getline为我创建的结构赋值,该结构的名称有一个字符串,测试分数有一个可调整大小的整数向量?
for (int i = 0; i < students.length(); ++i)
{
    ASSERT_THROW(fin >> students[i].n, "unable to read student name");
    std::string line;
    ASSERT_THROW(getline(fin, line), "unexpected failure or EOF in file");
    std::istringstream iss(line);
    int n;
    while (iss >> n)
        students[i].tests.push_back(n);
    ASSERT_THROW(iss.eof(), "invalid content in '" << line
                 << "' after test scores");
}
#define ASSERT_THROW(X, MSG) \
    do { \
        if (X) break; \
        std::ostringstream oss; \
        oss << __FILE__ << ':' << __LINE__ << " ASSERT_THROW(" \
              << #X << ") " << MSG; \
        throw std::runtime_error(oss.str()); \
    } while (false)