我在这里给出了我的代码的缩写和通用镜头。我正在尝试重载>>
运算符,并且不希望我的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美元
请注意我的输出中,我使用的区域不是宽度:
答案 0 :(得分:1)
您的问题很可能与流的先前状态相关联。如果缓冲区中有剩余的换行符,则第一个getline
将找到它并完成。
使用std::getline(input >> ws, _myObject.length);
丢弃前导空格。