Wann sollte std::cin.getline()
verwendet werden? Wovon unterscheidet es sich std::cin
?
std::cin.getline( ) vs. std::cin
Einfachheit
MSalter
Lass uns nehmen std::cin.getline()
ein Teil. Erstens gibt es std::
. Dies ist der Namensraum, in dem sich die Standardbibliothek befindet. Es hat Hunderte von Typen, Funktionen und Objekten.
std::cin
ist so ein Objekt. Es ist das standardmäßige Zeicheneingabeobjekt, definiert in <iostream>
. Es hat einige eigene Methoden, aber Sie können es auch mit vielen kostenlosen Funktionen verwenden. Die meisten dieser Methoden und Funktionen sind Möglichkeiten, ein oder mehrere Zeichen aus der Standardeingabe zu erhalten.
Endlich, .getline()
ist eine solche Methode std::cin
(und andere ähnliche Objekte). Sie sagen ihm, wie viele Zeichen er von dem Objekt auf seiner linken Seite bekommen soll (std::cin
hier) und wo diese Zeichen platziert werden sollen. Die genaue Anzahl der Zeichen kann variieren: .getline()
bricht in drei Fällen ab: 1. Das Ende einer Zeile ist erreicht 2. Es sind keine Zeichen mehr in der Eingabe (tritt normalerweise nicht auf std::cin
wie Sie weiter tippen können) 3. Die maximale Zeichenzahl wird gelesen.
Es gibt andere Methoden und Funktionen, die mit verwendet werden können std::cin
Objekt, z
std::string s;
int i;
std::cin >> s; // Read a single word from std::cin
std::cin >> i; // Read a single number from std::cin
std::getline(std::cin, s); // Read an entire line (up to \n) from std::cin
std::cin.ignore(100); // Ignore the next 100 characters of std::cin
alvelcom
Im Fall von char*, std::cin.getline
Zeile bekommen, statt std::cin
erstes Wort bekommen.
-
Ich verstehe diese Antwort nicht.
std::cin
bekommt nichts; es ist nur ein Objekt. Sie müssen etwas damit tun (z. B. eine Member-Funktion wie aufrufenget
) bevor es etwas tut.– CB Bailey
20. Januar 2011 um 10:56 Uhr
-
char s1[256], s2[256]; std::cin >> s1; cin.getline(s2, 256);
– alvelcom
20. Januar 2011 um 11:14 Uhr
-
std::cin >> s1
ist ein Aufruf einer globalen Funktionistream& operator>> (istream&, char*)
– gleich
20. Januar 2011 um 11:22 Uhr
-
Diese Antwort muss bearbeitet werden. Der Wortlaut und die Erklärung sind verwirrend
– Arjuna Deva
19. April 2021 um 13:02 Uhr
Oliver Charlesworth
Haben Sie Dokumentationen gelesen (z http://www.cplusplus.com/reference/string/getline/)?
Grundsätzlich, std::cin
(oder allgemeiner jede std::istream
) wird direkt verwendet, um formatierte Eingaben zu erhalten, z int x; std::cin >> x;
. std::cin.getline()
wird einfach verwendet, um einen Rohling zu füllen char *
Puffer.
-
das Mitglied getline bekommt Sie nicht a
std::string
es wird zum Füllen von a verwendetchar*
Puffer. Die Getline, die Ihnen ein bringtstd::string
ist die freie Funktionstd::getline
.– Etarion
20. Januar 2011 um 10:31 Uhr
-
@oli. Ja, ich habe die Dokumentation ein wenig gesehen, bin aber nicht auf die Idee gekommen. Jetzt ist es meiner Meinung nach klarer. Danke.
– Einfachheit
20. Januar 2011 um 10:40 Uhr
Wie bereits andere (noch besser) geantwortet haben, verwenden Sie grob gesagt getline()
um eine ganze Zeile zu lesen (d. h. eine Zeichenfolge, die mit endet \n
) und cin>>var
um eine Zahl zu lesen, die mit der Art von kompatibel ist var
(Integer, Float, Double etc.) oder ein einzelnes Wort.
In dieser Antwort möchte ich auf ein Problem hinweisen, das sich ergibt, wenn die beiden Methoden gemischt werden. Wenn Sie das tun:
int a;
string s;
cin>>a;
getline(cin, s)
cin
hinterlässt ein Zeilenende, \n
Zeichen, das dann gelesen wird getline();
. Es ist möglich, dieses Problem zu überwinden, indem man verwendet cin.ignore()
.
int a;
string s;
cin>>a;
cin.ignore();
getline(cin, s)
-
Es scheint ein gutes Beispiel für ein einfaches Beispiel zu sein. Danke.
– Hochan
24. November 2020 um 8:40 Uhr