C++の演習に問題があります。
演習では、ユーザーに日付を入力させることになっています。
問題はcin
、コンソールを使用すると、Enterキーを押すと1行下にジャンプするため、次のようになります。
Enter date please: 12
/23
/2001
代わりに:2001年12月23日
誰かが私がこの問題を克服するのを手伝ってくれませんか。
C++の演習に問題があります。
演習では、ユーザーに日付を入力させることになっています。
問題はcin
、コンソールを使用すると、Enterキーを押すと1行下にジャンプするため、次のようになります。
Enter date please: 12
/23
/2001
代わりに:2001年12月23日
誰かが私がこの問題を克服するのを手伝ってくれませんか。
cin
日付の読み方を言いません。これを試して:
char ignored;
int day, month, year;
std::cin >> month >> ignored >> day >> ignored >> year;
次に、プログラムを実行するときは、日付全体を入力するまでエンターを押さないでください。
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;
}