我使用cin时控制台中的新行

时间:2012-07-05 21:39:45

标签: c++

我遇到了C ++练习的问题。

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

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

Enter date please: 12

/23

/2001

而不是:12/23/2001

有人可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:6)

您没有说明如何使用cin来阅读日期。试试这个:

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

然后,当您运行程序时,不要按Enter键,直到您键入整个日期。

答案 1 :(得分: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;
}

如果你有streaming in literals的代码,可以简化为:

std::istream& operator>>(std::istream& in, date& obj) {
    return in >> obj.day>> '/' >> obj.month>> '/' >> obj.year;
}