3

我对 C++ 练习有疑问。

在练习中,我应该让用户输入一个日期。

问题是当我使用cin控制台时,当我按下回车键时会向下跳一行,所以它变成了这样:

Enter date please: 12

/23

/2001

而不是:2001 年 12 月 23 日

有人可以帮我克服这个问题。

4

2 回答 2

6

你没有说你是如何cin阅读日期的。尝试这个:

char ignored;
int day, month, year;
std::cin >> month >> ignored >> day >> ignored >> year;

然后,当您运行程序时,在您输入整个日期之前不要按 Enter 。

于 2012-07-05T21:45:46.867 回答
4

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;
}
于 2012-07-05T21:57:47.980 回答