C ++:如何从.dat文件中的特定行读取

时间:2013-09-22 03:35:11

标签: c++

我是C ++的新手,我正在尝试构建一个指针数组,通过读取.dat文件来键入Student,其中每行都是这种形式:

101 Jones 92.7 54.3 88 .4*88+.3*(92.7+54.3)

每一行都是struct的一个实例,并存储在指向Students的指针数组中。 这是我的代码:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <cstdlib>
using namespace std;
const int N = 100;
struct Students{
        int classid;
        string lastname;
        float exam1;
        float exam2;
        float final;
        float score;
};


int main(void){
        Students* s[N];
        ifstream input;
        ofstream output; 
        input.open("examscores.dat");
        for(int i=0; i< 10; i++){
                s[i] = new Students; 
                input >> s[i]->classid >> s[i]->lastname >> s[i]->exam1 >> s[i]->exam2 >> s[i]->final >> s[i]->score;
        }
        cout << s[0]->classid << endl;
        cout << s[4]->classid << endl;
        cout << s[5]->classid << endl;
return 0;
}   

我期待这个输出:

101
105
106

但我明白了:

101
0
0

1 个答案:

答案 0 :(得分:3)

.4*88+.3*(92.7+54.3)不适合float。您必须将其作为字符串读取,并自行解析表达式。

当您使用input >> ... >> s[i]->score时,它会读取.4,但将其余部分(*88+.3*(92.7+54.3))留在缓冲区中,并将随后的读取搞定。

Quickfix:float score;替换为std::string score;