c++primer第14章习题 哪里错了啊谢谢
习题14.10.下述Sales_item输入操作符有什么错误?
读入(a)0-201-99999-9 10 24.95
(b)10 24.95 0-201-99999-9
istream &operator>>(istream &in, Sales_item &s)
{
double price;
in >> s.isbn >> s.units_sold >> price;
s.revenue >> s.units_sold *price;
return in;
}
然后想写一段完整的代码测试测试。如下。好多错误啊。求指点谢谢啦
#include <iostream>流输入操作符
using namespace std;
class Sales_item
{
public:
friend istream &operator>>(istream&, Sales_item&);
friend ostream &operator<<(istream&, const Sales_item&);
private:
string isbn;
unsigned units_sold;
double revenue;
};
ostream &operator<<(istream &out, const Sales_item &s)
{
out << s.isbn << "\t" << s.units_sold << "\t"
<< s.revenue << "\t";
return out;
}
istream &operator>>(istream &in, Sales_item &s)
{
double price;
in >> s.isbn >> s.units_sold >> price;
s.revenue >> s.units_sold *price;
return in;
}
int main()
{
Sales_item s1;
cin >> s1;
cout << s1;
return 0;
}
[解决办法]
#include <iostream>
using namespace std;
class Sales_item
{
public:
friend istream &operator>>(istream&, Sales_item&);
friend ostream &operator<<(ostream&, const Sales_item&);
private:
string isbn;
unsigned units_sold;
double revenue;
};
ostream &operator<<(ostream &out, const Sales_item &s)
{
out << s.isbn << "\t" << s.units_sold << "\t"
<< s.revenue << "\t";
return out;
}
istream &operator>>(istream &in, Sales_item &s)//throw(const char*)
{
double price;
if(!in)throw "输入有误,请检查";
in >> s.isbn >> s.units_sold >> price;
s.revenue = s.units_sold *price;
return in;
}
int main()
{
Sales_item s1;
cin >> s1;
cout << s1;
return 0;
}
//ostream &operator<<(istream &out, const Sales_item &s)
//这个定义和声明你笔误了,应该写成
//ostream &operator<<(ostream &out, const Sales_item &s)
//还有s.revenue >> s.units_sold *price;你也笔误了
//应该写成s.revenue = s.units_sold *price;