2017-01-24 1 views
-5

Wie i eine ganze Zahl cin kann dann eine Zeichenfolge „mit Leerzeichen“ dies mein CodeEingabe eines Integer dann eine Zeichenfolge mit Leerzeichen C++

int x;string s; 
    cout<<"Enter Integer"<<endl; 
    cin>>x; 
    cout<<"Enter the string with spaces"<<endl; 
    //if i used cin>>s here then it will not read all the text because it has spaces 
    // is i used getline(cin,s); then it will not read any thing 
+2

Warum # include ? –

+2

Was hast du probiert? Auch * WHY * hält jeder mit '' ?? – DeiDei

+0

oder irgendein anderes was auch immer –

Antwort

0

Das Problem, das Sie wahrscheinlich haben, dass die cin >> x liest nur die Ziffern der von Ihnen eingegebenen Zahl und nicht die folgende Zeilenumbrüche. Wenn Sie dann eine cin >> s lesen, um eine Zeichenfolge zu lesen, sieht der Eingabeprozessor die neue Zeile und gibt nur eine leere Zeichenfolge zurück.

Die Lösung besteht darin, eine Funktion zu verwenden, die zum Lesen ganzer Eingabezeilen dient, z. B. std::getline. Verwenden Sie den Extraktionsoperator >> nicht für interaktive Eingaben.

0

So lesen Sie eine Zeichenfolge mit Leerzeichen use std::getline.

Aber!

Achten Sie darauf, was mit >> passiert, wenn es ein Trennzeichen trifft. Es stoppt und hinterlässt den Begrenzer im Stream. Dies ist kein Problem, solange Sie nur >> verwenden, da >> alle Leerzeichen verworfen werden. std::getline wird diese Leerzeichen erfassen und eine gemeinsame usecase ist

user types in number and hits enter 
user types in string and hits enter 

Also, was passiert? >> extrahiert die Nummer und stoppt, wenn sie auf Leerzeichen trifft. Dadurch wird das Ende der Zeile im Stream angezeigt, indem Sie im Stream die Eingabetaste drücken. std::getline kommt mit und das erste, was es sieht, ist ... Ende der Zeile. std::getline speichert eine leere Zeichenfolge und kehrt sofort zurück. Jetzt verarbeitet das Programm eine leere Zeichenkette, und der Benutzer, der immer noch erwartet, eine Zeichenkette einzugeben, gibt eine Zeichenkette ein, die durch ein zukünftiges Lesen gelesen wird, wodurch der Eingabestrom möglicherweise in einen Fehlerfall versetzt wird und dem Benutzer sicherlich eine Überraschung bringt.

Eine gängige Lösung ist to use ignore(numeric_limits<streamsize>::max(), '\n');, um alle Daten im Stream bis einschließlich zum Zeilenende zu konsumieren, bevor der Benutzer zur Eingabe aufgefordert und std::getline aufgerufen wird.

Verwandte Themen