我有点卡在这个问题上..
标题文件 * *
#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 - 嘿”
任何人都可以解释为什么这样的打印结果。 以及如何打印整个曲目标题。
答案 0 :(得分:2)
>>
运算符输入标记,由空格(空格/制表符/换行符)分隔。您只输入标题的第一个标记,这就是您输出的内容。
结帐getline
:
http://www.cplusplus.com/reference/string/getline/
答案 1 :(得分:0)
在阅读曲目标题时,您需要告诉cin不要跳过空格 - 请参阅How to cin Space in c++?
尝试以下
if (is >> trackTime >> c1 >>noskipws >>trackTitle)
{
...