2016-06-05 16 views
1

Ich schrieb den Code unten, dieValidate Konsole Eingabe in C++

char input[100]; 
cin.getline(input, sizeof(input)); 
stringstream stream(input); 
while (stream.rdbuf()->in_avail() != 0) { 
    int n; 
    stream >> n; 
    numbers.push_back(n); 
} 

in einem Fall von gültigem Eingang funktioniert aber nicht, wenn ich etwas anstelle einer Zahl setzen. Wie kann ich falsch eingegeben (z. B. einen beliebigen Buchstaben)?

+0

Ich glaube, Sie müssen die Zeichenfolge 'iterieren input' wenn es zu prüfen, nur von ganzzahligen Ziffern zusammengesetzt ist, bevor es in' n' –

+0

Mögliche Duplikat http Lesung: // Stackoverflow .com/questions/4654636/how-to-bestimmen-wenn-eine-Zeichenfolge-ist-eine-Nummer-mit-c –

+1

Mögliche Duplikat von [Ganzzahleingabe Validierung, wie?] (http://stackoverflow.com/questions/13212043/integer-input-validation-how), [Gute Eingangsvalidierungsschleife mit cin - C++] (http://stackoverflow.com/questions/2075898/good-input-validation-loop-using-cin-c) – GingerPlusPlus

Antwort

1

Zum Beispiel:

bool is_number(const std::string& s) 
{ 
    return !s.empty() && std::find_if(s.begin(), 
     s.end(), [](char c) { return !std::isdigit(c); }) == s.end(); 
} 

foo() { 
    char input[100]; 
    cin.getline(input, sizeof(input)); 
    stringstream stream(input); 
    while (stream.rdbuf()->in_avail() != 0) { 
     std::string n; 
     stream >> n; 
     if(is_number(n)) { 
      numbers.push_back(std::stoi(n)); 
     } 
     else { 
      std::cout << "Not valid input. Provide number" << std::endl; 
     } 
    } 
} 

int main() 
{ 
    foo(); 
    return 0; 
} 
+0

Danke. Du hast vergessen #include djaszak

+0

@djaszak Gern geschehen. True Ich habe keine Includes geschrieben. – paweldac