我对 C++ 练习有疑问。
在练习中,我应该让用户输入一个日期。
问题是当我使用cin
控制台时,当我按下回车键时会向下跳一行,所以它变成了这样:
Enter date please: 12
/23
/2001
而不是:2001 年 12 月 23 日
有人可以帮我克服这个问题。
我对 C++ 练习有疑问。
在练习中,我应该让用户输入一个日期。
问题是当我使用cin
控制台时,当我按下回车键时会向下跳一行,所以它变成了这样:
Enter date please: 12
/23
/2001
而不是:2001 年 12 月 23 日
有人可以帮我克服这个问题。
你没有说你是如何cin
阅读日期的。尝试这个:
char ignored;
int day, month, year;
std::cin >> month >> ignored >> day >> ignored >> year;
然后,当您运行程序时,在您输入整个日期之前不要按 Enter 。
Robᵩ 有一个很好的答案,但我要扩展它。使用结构和重载运算符,并检查斜杠。
struct date {
int day;
int month;
int year;
};
std::istream& operator>>(std::istream& in, date& obj) {
char ignored1, ignored2;
in >> obj.day>> ignored1 >> obj.month>> ignored2 >> obj.year;
if (ignored1!='/' || ignored2!='/')
in.setstate(in.rdstate() | std::ios::badbit);
return in;
}
如果您有用于流式传输的代码,则可以将其简化为:
std::istream& operator>>(std::istream& in, date& obj) {
return in >> obj.day>> '/' >> obj.month>> '/' >> obj.year;
}