2017-05-27 3 views
-1

so habe ich versucht, aus einer Endlosschleife zu bekommen, wenn Sie einige Zahlen von der Konsole lesen. Dies ist der Leseteil-Code:C++ lesen Integer-Array von der Konsole

vector<int> all; 
string input; 
while (getline(cin, input)) { 
    int number; 
    stringstream ss(input); 
    while (ss >> number) { 
     all.push_back(number); 
    } 
} 

I dies auch versucht:

vector<int> all; 
while (cin >> number) { 
    all.push_back(number); 
} 
+0

Gehen Sie mit dem zweiten Beispiel und geben Sie eine EOF-Zeichen auf der Konsole (common EOF Zeichen Strg-D oder Strg-Z). –

Antwort

-1

Eine schnelle Art und Weise, dies zu lösen, ist die äußere Schleife zu brechen, wenn eine Leerzeile von der Konsole eingeben:

while (getline(cin, input)) 
{ 
    if (input == "") 
     break; 
    ... 
} 

Hinweis: einige Implementierung geben einen Wagenrücklauf am Ende der Zeile in der getline zurück, es streift nur die neue Zeile (Zeilenvorschub)Wie gesagt, dies ist eine sehr einfache und schnelle Möglichkeit, einen Ausgang aus Ihrer Endlosschleife zu machen, aus Sicht des Anwenders kann er/sie Zahlen eingeben, die durch Leerzeichen, Tabulatoren, Enter oder beliebige Kombinationen und. Getrennt sind Ihr Vektor wird gefüllt, bis der Benutzer eine leere Zeile eingeben.

Ihr Code wie folgt aussehen:

#include <string> 
#include <vector> 
#include <iostream> 
#include <sstream> 

using namespace std; 

int main() 
{ 
    vector<int> all; 
    string input; 
    while (getline(cin, input)) { 
     if (input == "") 
      break; 
     int number; 
     stringstream ss(input); 
     while (ss >> number) { 
      all.push_back(number); 
     } 
    } 
    // Here the vector "all" has any numbers entered by user 
    return 0; 
} 
+0

Ich bin verwirrt. Ist mein Weg geeignet, alle eingegebenen Zahlen in meinen All-Vektor zu setzen. –

+0

"einige Implementierung einen Wagenrücklauf am Ende der Zeile in der getline zurückgeben" - nein, sie nicht. –

+0

"Nein, sie tun nicht", aktuelle up Implementierungen nicht und die Antwort darauf, aber einige Embedded-Systeme _ ** (ist schon oft mit Kontrollsystemen passiert) ** _ mit alten Implementierungen und arbeitet innerhalb einer Umgebung, in der die Zeilenbeendigung ist, entfernen Sie den Zeilenvorschub (ASCII 10 oder 0A hex) und lassen Sie den Wagenrücklauf (ASCII 13 oder 0D hex), so dass der Vergleich wie folgt erfolgen muss: if (input == "\ r") Pause; – TrustworthySystems