重载cin>>运算符跳过一行输入

时间:2014-10-14 13:33:04

标签: c++ operator-overloading cin

我在这里给出了我的代码的缩写和通用镜头。我正在尝试重载>>运算符,并且不希望我的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美元

请注意我的输出中,我使用的区域不是宽度:

Output Image

1 个答案:

答案 0 :(得分:1)

您的问题很可能与流的先前状态相关联。如果缓冲区中有剩余的换行符,则第一个getline将找到它并完成。

使用std::getline(input >> ws, _myObject.length);丢弃前导空格。