0

私はこの質問に少し立ち往生しています..

ヘッダファイル* *

#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 ファイル..** * *

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 - ヘイ ジョー (ビリー ロバーツ)」

「0:03:30 - Hey」のみが出力されます

なぜ印刷結果がそのようになるのか、誰でも説明できますか? トラックのタイトル全体を印刷するにはどうすればよいですか。

4

2 に答える 2

2

オペレーターは>>、空白 (スペース/タブ/改行) で区切られたトークンを入力します。タイトルの最初のトークンのみを入力しているので、それが出力されます。

チェックアウトgetline: http://www.cplusplus.com/reference/string/getline/

于 2012-12-11T03:24:53.127 に答える
0

トラック タイトルを読み取るときに空白をスキップしないように cin に指示する必要があります - How to cin Space in c++? を参照してください。

以下を試してください

if (is >> trackTime >> c1 >>noskipws >>trackTitle)
{
    ...
于 2012-12-11T03:24:56.170 に答える