入力文字列が正しい形式(正しい形式XXX-X-XXX)であることを保証しようとしていますが、char temp [255]とcinを使用しても構いません。 getlineの組み合わせ。C++で正しい文字列入力を保証する
登録プレートを入力します:shjkf 22H 23jfh3kfh jkfhsdj h2j H2K 123-A-456
としては想定しregPlate
は、これまでのところ私はこの1つ以外のすべての例外 "キャッチ" を管理しています最後に正しい形式の文字列を含む入力からすべての文字列を取得し、文字列を出力します。これは正しくありません。最初の文字列を読み終えたら、Bad入力とその後のすべてを削除する必要があります。
cin.clear()
、cin.ignore()
などを使用しようとしました。私のの場合が機能しますが、結果はありません。
void main()
{
std::string regPlate;
do
{
cout << "Enter registration plate: ";
cin >> regPlate;
if (regPlate.size() < 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-' || regPlate.size() > 9)
{
cout << "Bad entry" << endl;
}
} while (regPlate.size() < 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-' || regPlate.size() > 9);
cout << endl << regPlate << endl;
system("pause");
}
を使用する代わりに
std::cin>>regPlate
です。 「9」と等しくないサイズのチェックを1回だけ行います。 –あなたの問題については、おそらく['std :: getline'](http://en.cppreference.com/w/cpp/string/basic_string/getline)をお探しですか? –
@Someprogrammerdude "ですが、私はchar temp [255]とcin.getlineの組み合わせを使用することを心配していません。" –