我定义的这个重载输入操作符哪里有什么问题啊???
- C/C++ code
................class student{ friend std::istream& operator>>(std::istream&,student&); friend std::ostream& operator<<(std::ostream&,const student&);public: student():s_name("*"),s_num("*"),s_class("*"){} std::string s_name; //姓名 std::string s_num; //学号 std::string s_class; //班级 std::map<std::string,double> s_score;//课程得分 double average; //平均成绩 };inline std::istream& operator>>(std::istream &in,student &rhs){ in>>rhs.s_name>>rhs.s_num>>rhs.s_class; std::string kc; //课程名字 double score=0.0; //课程得分 while(in>>kc>>score) rhs.s_score.insert(make_pair(kc,score)); return in;}................
- C/C++ code
................int main(){ ifstream infile("d:\\sdt.txt"); string str_line; student xuesheng; while(getline(infile,str_line)) { istringstream sin(str_line); sin>>xuesheng; cout<<xuesheng<<endl; }}................
假设我sdt.txt文件里的内容是
游枭01初2003级1班数学 90 语文 100
王子02初2003级2班数学 80 语文 56
乌龟03初2003级3班数学 70 语文 64
程序运行后的结果就变成了
游枭01初2003级1班数学 90 语文 100
王子02初2003级2班数学 90 语文 100
乌龟03初2003级3班数学 90 语文 100
这是什么原因啊?
[解决办法]
把 student xuesheng; 这句话放到while循环里面就行了,原因你该清楚^_^
[解决办法]
student xuesheng;//attention *******************
while(getline(infile,str_line))
{
istringstream sin(str_line);
sin>>xuesheng;
cout<<xuesheng<<endl;
}
你每次都在对一个student对象(xuesheng)进行操作,当然会得出这样的结果。
执行in>>rhs.s_name>>rhs.s_num>>rhs.s_class;时,学生对象里的相关值会改变,
而执行rhs.s_score.insert(make_pair(kc,score))时,由于key为“数学”和“ 语文”的pair已经存在,第二三次插入不可能成功,
因此结果始终是 :“数学 90 语文 100”
修改方法:
//student xuesheng;
while(getline(infile,str_line))
{
student xuesheng;//attention *******************
istringstream sin(str_line);
sin>>xuesheng;
cout<<xuesheng<<endl;
}