2016-04-10 15 views
0

Im unterschiedliche Funktionen von der Tastatur zu nennen versuchen, aber ich habe ein paar Probleme durch meinen Mangel an Wissen/Erfahrung mit cin konfrontiert, istringstream etc.Here meine vereinfachte Code:C++ Lesen von stdin istringstream mit

#include <iostream> 
#include <sstream> 

using namespace std; 

int main(int argc,char **argv) { 

    string line; 
    do { 
     getline(cin,line); 
     istringstream iss(line); 
     string word; 
     iss >> word; 
     if (word == "function") { 
      int id; 
      if (!(iss >> id)) { 
       cout << "Not integer.Try again" << endl; 
       continue; 
      } 
      cout << id << endl; 
      iss >> word; 
      cout << word << endl; 
     } 
     else cout << "No such function found.Try again!" << endl; 
    } while (!cin.eof()); 

    cout << "Program Terminated" << endl; 
    return 0; 
} 

die 2 Probleme, die ich mit derzeit beschäftigen, sind:

• Warum nach der Überprüfung, ob ich eine ganze Zahl der do-while-Schleife endet bekam, wenn ich etwas eingeben, die integer ist nicht? (zB "function dw25") -Hat zu verwenden fortfahren; statt Break; .Thought Break würde die äußere If-Bedingung verlassen.

• Wie kann ich das Problem lösen, das auftritt, wenn ich "function 25dwa" eintippe, weil ich nicht ID == 25 & word == dwa bekommen möchte.

+1

http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong –

+0

Der Grund, warum die do-while-Schleife beendet ist, weil Sie verwenden ** Pause ** .if (! (iss >> id)) {cout << "Nicht ganzzahl.Versuchen Sie erneut" << endl; ** Pause; **} –

+0

Yep fand es heraus und redigierte meine Post.Thanks tho.Versuchen Sie, eine Lösung oder eine Umgehungslösung für die 2. Frage –

Antwort

1

Ich denke, Sie könnten strtol verwenden, um zu überprüfen, ob id eine ganze Zahl ist.

#include <iostream> 
#include <sstream> 
#include <stdlib.h> 

using namespace std; 

int main() 
{ 
    string word, value; 
    while ((cin >> word >> value)) { 
     if (word == "function") { 
      char* e; 
      int id = (int) strtol(value.c_str(), &e, 10); 
      if (*e) { 
       cout << "Not integer.Try again" << endl; 
       break; 
      } 
      cout << id << endl; 
      if (!(cin >> word)) 
       break; 

      cout << word << endl; 
     } else { 
      cout << "No such function found.Try again!" << endl; 
     } 
    } 

    cout << "Program Terminated" << endl; 
    return 0; 
}