3

を使用してC++で次のことを実現するにはどうすればよいcinですか?

scanf("%d:%d:%d",&day,&month,&year);

さらに、入力が数字、文字、または浮動小数点数であるかどうかを確認する方法。たとえばscanf("%d",&a);、ユーザーが文字を入力した場合のように行がある場合、それを停止して、正しい入力を取得するようにユーザーに促すにはどうすればよいですか。

4

3 に答える 3

4

私はおそらく行全体を読んだり、この場合は空白で区切られた文字列だけを読んだりして、それを解析しsscanfます...に精通している場合はsscanf少しでも問題はありませんが、#include <cstring>結局のところ標準です...

string datestr;
cin >> datestr;
int result = sscanf(datestr.c_str(), " %d:%d:%d", &day, &month, &year);

より多くのC++ソリューションについては、Boostには何かがありますが、私自身はそれを使用していません。

于 2013-03-09T18:16:42.117 に答える
2

注:以下はテストされていません。

unsigned int day;
unsigned int month;
unsigned int year;
cin >> day;
cin.ignore(20,':'); // Ignore everything up to and including the ':'.
cin >> month;
cin.ignore(20, ':');
cin >> year;

「スキップ」も調べてください。を使用skipwsすると、すべてを1行にまとめることができる場合があります。

char colon;
cin >> day >> colon >> month >> colon >> year;
于 2013-03-09T19:05:41.380 に答える
-3

これと同じくらい簡単です:

cin >> day  >>  month >> year;

乾杯 :)

于 2013-03-09T18:05:51.627 に答える