【发布时间】:2020-11-26 20:43:19
【问题描述】:
我正在向流写入一个函数,并且正在向 istream 读取函数。我的 ostream 函数如下所示:
ostream& Time:: write(ostream& ostr)const {
int hour;
int minutes;
hour = m_min / 60;
minutes = m_min % 60;
// Time::write(ostr);
ostr << setfill('0') << setw(2) << hour;
ostr << setfill('0') << setw(1) << ":";
ostr << setfill('0') << setw(2) << minutes;
return ostr;
}
std::istream& read(std::istream& istr);从 H:M 格式的流中读取时间。它确保两个整数(小时和分钟)用“:”分隔,否则会将 istream 对象设置为失败状态。 (请参阅下面的步骤以了解如何)
请注意,此函数不会对任何无效数据作出反应。它只需遵循以下步骤:
使用 istr 读取小时的整数
读取一个字符并确保它是 ':',如果不是,将通过发出以下命令将 istream 对象设置为失败状态:
istr.setstate(ios::failbit);使用 istr 读取分钟的整数
注意:请勿清除或刷新 istream,因为此方法符合 istream 标准。如果需要,该函数的调用者可以检查 istream 状态以确保读取成功。
到目前为止,这就是我所拥有的,但我不确定我是否得到了它要求我做的事情,或者我做得对:
istream& Time::read(istream& istr) {
int hour;
int minutes;
hour = m_min / 60;
minutes = m_min % 60;
istr >> hour;
if (hour != ':') {
istr.setstate(ios::failbit);
}
istr >> minutes;
cout << hour << ":" << minutes << endl;
}
我这样做对吗?如果不是,我应该如何解释这些说明?
【问题讨论】:
-
我建议,如果您难以理解老师在作业中的指示,您应该与 他们 进行对话以澄清这一点,而不是随意的陌生人在互联网上。
-
m_min来自哪里?您必须读取一个数字、一个字符和另一个数字。目前你只是在读两个数字。 -
@ThomasSablik 前缀
m_通常代表“成员”,在输出函数中使用m_min在这种情况下是有意义的。输入函数中的相同用法是一个明显的复制/粘贴错误
标签: c++