2017-01-05 7 views
0

入力文字列が正しい形式(正しい形式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"); 
} 
+2

を使用する代わりにstd::cin>>regPlateです。 「9」と等しくないサイズのチェックを1回だけ行います。 –

+0

あなたの問題については、おそらく['std :: getline'](http://en.cppreference.com/w/cpp/string/basic_string/getline)をお探しですか? –

+0

@Someprogrammerdude "ですが、私はchar temp [255]とcin.getlineの組み合わせを使用することを心配していません。" –

答えて

0

は思いwhileループの仕事、多分何かのように:私はあなたのコードを実行した(いくつかの仮定で)あなたが提供する例を使用して

int main(){ 
    string regPlate; 
    while(regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-'){ 
     cout << "Enter registration plate: " << endl; 
     cin >> regPlate; 
    } 
    cout << regPlate; 
    return 0; 
} 
0

AN期待通りに動作するようです。ここに私が走ったものがあり、ヘッダーが含まれています。

#include <string> 
#include <iostream> 

using namespace std; 

void main() 
{ 
    string regPlate; 
    do 
    { 
     cout << "Enter registration plate: "; 
     cin >> regPlate; 
     if (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-') 
     { 
      cout << "Bad entry" << endl; 

     } 
    } while (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-'); 
    cout << endl << regPlate << endl; 

    system("pause"); 
} 

私が受け取る出力は次のようになります。

Enter registration plate: shjkf 22h 23jfh3kfh jkfhsdj h2j h2k 123-A-456 
Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: 
123-A-456 

私はまた、手動でリストされたすべての値を入力した、また、そのように動作するように見えました。

+0

入力が無効です。 問題を修正しましたが、とにかくありがとうございます。 –

0

@Someprogrammerdudeのおかげで、私は問題を解決できました。私がしなければならなかった

だけの事は9` `より大きい*あなたは` 9` *よりも小さいサイズを確認するために必要としませんstd::getline(cin,regPlate)

std::string regPlate; 
    do 
    { 
     cout << "Enter registration plate: "; 
     std::getline(cin, regPlate); 
     if (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-') 
     { 
      cout << "Bad entry" << endl; 

     } 
    } while (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-'); 
    cout << regPlate << endl; 
関連する問題