2017-01-05 6 views
0

Ich versuche sicherzustellen, dass meine Eingabezeichenfolge richtig formatiert ist (korrektes Format XXX-X-XXX), aber ich möchte nicht char temp [255] und cin verwenden. Getline-Kombination.Korrekte String-Eingabe in C++ sicherstellen

Bisher habe ich neben diesem einen zu "fangen" alle Ausnahmen verwaltet:

Geben Sie amtliches Kennzeichen: shjkf 22h 23jfh3kfh jkfhsdj H2J h2k 123-A-456

Wie angenommen regPlate wird alle Zeichenfolgen von der Eingabe einschließlich der korrekten formatierten am Ende erhalten und es wird die Zeichenfolge gedruckt. Das ist nicht korrekt. Nach dem Lesen der ersten Zeichenfolge sollte es Bad-Eingabe und alles, nachdem es gelöscht werden muss, drucken.

Ich habe versucht zu verwenden cin.clear(), cin.ignore(), etc. in meinem wenn Funktion aber ohne Ergebnisse.

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

Sie verwenden nicht für Größe müssen prüfen, kleiner ist als '9' * und * größer als' 9'. Überprüfen Sie einfach, ob die Größe nicht 9 entspricht. –

+0

Suchen Sie für Ihr Problem vielleicht nach ['std :: getline'] (http://en.cppreference.com/w/cpp/string/basic_string/getline)? –

+0

@Someprogrammerdude "aber ich möchte nicht char temp [255] und cin.getline combination verwenden." –

Antwort

0

Würde einer while-Schleife arbeiten, vielleicht so etwas wie:

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

Am Beispiel Sie (mit einigen Annahmen) bieten lief ich Ihren Code ein scheint es wie erwartet zu funktionieren. Hier ist, was ich lief, mit den Kopfzeilen enthalten.

#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"); 
} 

Der Ausgang I erhalten ist:

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 

ich auch manuell eingegeben alle Werte aus Ihrer aufgelistet, und es schien auch so zu arbeiten.

+0

Diese Eingabe ist ungültig. Ich habe das Problem behoben, aber danke trotzdem. –

0

Dank @Someprogrammerdude habe ich es geschafft, das Problem zu beheben.

Das einzige, was ich zu tun habe, ist, statt std::cin>>regPlatestd::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; 
Verwandte Themen