2016-05-25 13 views
-4

Hier ist die Frage. Ich habe einen Vektor von Ints, und Benutzer sollte seine Elemente eingeben, solange er oder sie will. Dann wird dieser Vektor an eine Funktion übergeben, die aus welchem ​​Grund auch immer ihre Größe berechnet. Gibt es einen Weg dazu? Ich fand einige Codes auf Seiten des Internet:Unbekannte Größe Vektor Eingabe

std::vector<int> vec; 

std::string buffer = ""; 

std::cout << "Enter numbers. " 
      << "After you finish, enter newline" << std::endl; 

do { 
    std::getline(std::cin, buffer); 
    if (buffer.size() > 0) { 
     vec.push_back(atoi(buffer.c_str())); //stoi was not declared =(
    } 
} while (buffer != ""); 

foo(vec); 
.... 
void foo(std::vector<int> &input) 
{ 
    for (const int &i : input) 
     { 
      std::cout << i << endl; 
     } 
} 

Aber dieser Code nicht funktioniert in der richtigen Art und Weise: Ich wähle die Eingabe von Zahlen und es tut einfach nichts. Hab keine Ahnung, was damit nicht stimmt. (C++ 11 freigegeben)

+0

Was meinst du mit "es tut nichts"? Meinst du, nichts wird zurück auf den Vektor geschoben? In der Frage gibt es übrigens auch eine Inkonsistenz zwischen den 'std :: vector' Variablennamen' vec' und 'input'. – ArchbishopOfBanterbury

+0

argh, vergessen zu ändern, während Copypaste; es gibt mir einfach nicht einmal eine Chance, etwas einzugeben – Evgeny

+0

Was passiert, wenn der Benutzer "Frosch" statt einer Zahl eingibt? –

Antwort

0

Wenn Sie auf einen Vektor Artikel hinzufügen möchten, bis es nicht mehr eingegeben wird (oder bis ein Sentinel-Wert eingegeben wird), Verwendung von std::istringstream und operator >> könnte verwendet werden:

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

int main() 
{ 
    std::vector<int> vec; 
    std::string buffer; 
    int data; 
    std::getline(std::cin, buffer); 
    std::istringstream iss(buffer); 
    while (iss >> data) 
      vec.push_back(data); 
    foo(vec); 
} 

Live Example

+0

Dies wird nicht aufhören, wenn die Benutzer gibt eine leere Zeile ein, er muss das EOF-Zeichen eingeben. – Barmar

+0

Hoppla, ich habe es falsch gelesen. Dazu muss er alle Zahlen in einer einzigen Zeile eingeben, anstatt wie in seinem ursprünglichen Code pro Zeile. – Barmar

+0

Nun, es sieht so aus, als ob ich das gesucht habe, danke! – Evgeny

Verwandte Themen