std::cin.getline( ) vs. std::cin

Lesezeit: 3 Minuten

stdcingetline vs stdcin
Einfachheit

Wann sollte std::cin.getline() verwendet werden? Wovon unterscheidet es sich std::cin?

1646671816 540 stdcingetline vs stdcin
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

stdcingetline vs stdcin
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 aufrufen get) 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 Funktion istream& 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

1646671818 139 stdcingetline vs stdcin
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::stringes wird zum Füllen von a verwendet char* Puffer. Die Getline, die Ihnen ein bringt std::string ist die freie Funktion std::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, \nZeichen, 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

967840cookie-checkstd::cin.getline( ) vs. std::cin

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy