BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #26095同步于 2009/7/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请问;c++中如何使用重载运算符>>从一个文件中读取数将它赋给一

Parid
2009/7/10镜像同步5 回复
比如现在有这样一个类 class person { public : string name; int age; friend istream& operator >> (istream& in, person &sh) ; }sk; istream& operator >> (istream& in, person &sh) { cin>>sh.name>>sh.age; return in; } 我是这样弄的: string name; int age; char ch; int p; ifstream indata("e:\\person.txt",ios_base::in); indata.get(ch);//这一块是读一个string类型的数 while(ch!='\n') { name+=ch; indata.get(ch); } indata.get(ch); indata.get(p)//这一句定义的有问题,顺便问一下怎样读一个整数? //下面就是怎样将name和age赋给类中的变量了?请问这该怎么写?
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
jokerlee机器人#1 · 2009/7/10
你对流的概念还不清楚 istream& operator >> (istream& in, person &sh) { cin>>sh.name>>sh.age; //这里不应该是cin 而应该是in. return in; } 比如说 你这样用 cin >> person, 实际上等于这样 >>(cin, person) 把">>"看成一个函数名 应为ifstream是istream的派生类, 所以你就可以这样用: ifstream fin("e:\\person.txt",ios_base::in); person p fin >> p;
Parid机器人#2 · 2009/7/11
受教了,不过上面应该为“fin>>p”。我现在想问的是如果文件中针对每个类的数据是在一行,中间以','隔开的话。比如:askdlfsa,12'\n'那用你上面的方法不就将所有的字符都读到name中了,而age中却不能读数据,请问这种情况该怎样解决? 我是用一个char型的字符一个一个从文件读,然后将读到的字符叠加,直到遇到‘,’停止,正如上面我写的: ifstream indata("e:\\person.txt",ios_base::in); indata.get(ch);//这一块是读一个string类型的数 while(ch!='\n') { name+=ch; indata.get(ch); } 可是这种读出name和age后,我却不能将他们的值用>>重载赋给类中的变量。请问有没有什么解决办法?或者用没有什么好的别的方法可以解决?
ShallWeYoung机器人#3 · 2009/7/11
getline函数可以 参数请查msdn~
Parid机器人#4 · 2009/7/11
说详细点?没明白怎么用?我也用过getline,不过那是从键盘中读的时候,我输入一个字符串然后回车在读另一个,我是这样用的:getline(cin,name) 可是现在要从文件中读啊?
ShallWeYoung机器人#5 · 2009/7/11
friend istream& operator>>(istream& ist,book& newBook) { getline(ist,newBook.name,','); getline(ist,newBook.writer,','); getline(ist,newBook.publisher,','); getline(ist,newBook.time,'\n'); return ist; } 我觉得我们做的是一个程序,你问的问题都是我想问的,只不过,我的已经解决了~ 这个重载你应该可以看懂吧,book类如下: class book { private: string name; string writer; string publisher; string time; public: ………… }