C ++音乐专辑打印出曲目标题

时间:2012-12-11 03:20:13

标签: c++

我有点卡在这个问题上..

标题文件 * *

#include "Duration.h"

class Track
{
private:

    Duration trackTime;
    std::string trackTitle;

public:

    inline Duration getTrackTime() const;

    inline std::string getTrackTitle() const;

    Track(Duration d  = Duration(0,0,0),std::string trackTitle = "");

};

inline std::string Track::getTrackTitle() const
{
    return trackTitle;
}

** * * cpp文件.. < / EM>的 ** * *

using namespace std;

Track::Track(Duration trackTime , string trackTitle)
{
    this->trackTitle = trackTitle;
    this->trackTime  = trackTime;

}

istream& operator>>(istream& is, Track & t)
{
    Duration trackTime;
    string trackTitle;

    char c1;

    if (is >> trackTime >> c1 >>trackTitle)
    {
        if(c1 == '-')
        {
            t = Track(trackTime,trackTitle);
        }
        else
        {
            is.clear(ios_base::failbit);
        }
    }

    return is;
}

** * ** * ***

int main(int argc, const char * argv[])
{
    Track track;
    cin >> track;
    cout << track <<endl;


}

我只是测试ostream是我所期待的。

但是当我像这样输入字符串时。 “0:03:30 - 嘿乔(Billy Roberts)”

它只打印出“0:03:30 - 嘿”

任何人都可以解释为什么这样的打印结果。 以及如何打印整个曲目标题。

2 个答案:

答案 0 :(得分:2)

>>运算符输入标记,由空格(空格/制表符/换行符)分隔。您只输入标题的第一个标记,这就是您输出的内容。

结帐getlinehttp://www.cplusplus.com/reference/string/getline/

答案 1 :(得分:0)

在阅读曲目标题时,您需要告诉cin不要跳过空格 - 请参阅How to cin Space in c++?

尝试以下

if (is >> trackTime >> c1 >>noskipws >>trackTitle)
{
    ...