我是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
答案 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;