【发布时间】:2014-10-14 13:33:04
【问题描述】:
我在这里给出了我的代码的一个简短和通用的截图。我正在尝试重载 >> 运算符,并且不希望我的 cin 在空白处终止。
由于某种原因,它没有将第一个输入作为第一个属性的预期输入。我不确定它是如何确定成本的,它确实有所不同,我怀疑可能是一些 ASCII 转换。我并不那么担心,好像我可以让它接受第一个输入作为第一个值,我将有机会为三个不同的属性输入三次。
我相信这对有经验的程序员来说是直截了当的,我只是新手,谢谢。
class MyObject
{
protected:
string length;
string width;
float cost;
public:
friend ostream& operator<<(ostream& output, const MyObject& _myObject);
friend istream& operator>>(istream& input, MyObject& _myObject);
}
istream& operator>>(istream& input, MyObject& _myObject)
{
cout << "Enter Length, zones and cost:" << endl;
std::getline(input, _myObject.length);
std::getline(input, _myObject.width);
input >> _myObject.cost;
return input;
}
ostream& operator<<(ostream& output, const MyObject& _myObject)
{
cout.precision(2);
output << "Length is: " << _myObject.length << "\nWidth is: " << _myObject.width << "\nCost is : $" << fixed << _myObject.cost << endl;
return output;
}
这个长度
这个宽度
直接输出:
长度是:
宽度是:这个长度
费用:2.50 美元
请在我的输出中注意,我使用的是区域而不是宽度:
【问题讨论】:
-
I can't reproduce。显示真实的输入文件(因为例如在您的输入中没有
2.50)。 -
@AntonSavin:从问题来看,他的输入也没有:“我不确定它是如何确定成本的,它确实有所不同,我怀疑可能是一些 ASCII 转换。”
-
注意:
cout.precision(2);应该使用output,而不是cout,对吧? -
@user3956566 尝试使 MCVE, here is another demo 从文件中获取输入。如果你愿意,可以编辑它。
标签: c++ operator-overloading cin