3

C++の演習に問題があります。

演習では、ユーザーに日付を入力させることになっています。

問題はcin、コンソールを使用すると、Enterキーを押すと1行下にジャンプするため、次のようになります。

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;

次に、プログラムを実行するときは、日付全体を入力するまでエンターを押さないでください。

于 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 に答える