Wenn fertig, bitte Fenster schließen

getline Memberfunktion

Die vollständige Signatur der cin-Memberfunktion getline(...) sieht wie folgt aus:

istream& getline (char *pBuffer, int noOfChars, char del = '\n');

Der erste Parameter enthält einen Zeiger auf den Speicher (Feld), in dem die Eingabe abgelegt wird und zweite Parameter die maximale Anzahl der dort abzulegenden Zeichen. Der letzte Parameter spezifiziert das Zeichen, bis zu welchem die Eingabe in dem im ersten Parameter angegebenen Speicher übernommen wird. Standardmäßig ist dies der Zeilenvorschub.

Für die Arbeitsweise von getline(...) gilt nun folgendes: getline(...) liest so lange Zeichen von der Tastatur ein, bis die <RETURN>-Taste gedrückt wird, unabhängig vom angegebenen Abschlusszeichen. Im Anschluss daran wird die Eingabe auf das Vorhandsein des Abschlusszeichens (3. Parameter von getline(...)) hin untersucht. Jetzt können zwei Fälle auftreten:

1.) Das Abschlusszeichen ist vorhanden. Enthält die Eingabe dann vor dem Abschlusszeichen maximal noOfChars Zeichen, so wird die Eingabe bis zum Abschlusszeichen in das übergebene Feld umkopiert. Anschließend wird das Abschlusszeichen aus der Eingabe entfernt. Befinden sich dann noch weitere Zeichen in der Eingabe, so verbleiben diese dort und werden dem nächsten cin zur weiteren Bearbeitung übergeben. Wie Sie diesen 'Rest' der Eingabe aus dem Eingabepuffer entfernen können ist im nachfolgenden Beispiel nochmals aufgeführt.

2.) Das Abschlusszeichen fehlt. Dann liest die Memberfunktion getline(...) so lange weitere Zeichen ein, bis das Abschlusszeichen in einer Eingabe gefunden wird. Sehen Sie sich dazu einmal folgenden Fall an:

Anweisung:
cin.getline(feld,20,'$');  // $ ist Abschlusszeichen

Eingabe:
123<RETURN>
456<RETURN>
78$9<RETURN>

Ausgabe:
123<RETURN>
456<RETURN>
78

Wie Sie der Ausgabe entnehmen können, werden in diesem Fall sogar die Zeilenumbrüche mit im Feld abgespeichert.

Und noch ein weiteres Beispiel zu getline(...).

PgmHeader
#include <iostream>
#include <limits>
using std::cout;
using std::cin;
using std::endl;

// main() Funktion
int main ()
{
   // Feld zur Aufnahme der Eingabe definieren
   char array[40];

   // Hinweis ausgeben
   cout << "Bitte 1. Text eingeben: ";
   // Zeile einlesen bis '.' gefunden wurde oder Feld gefüllt ist.
   // Der Operator sizeof() liefert die Größe des Feldes in Bytes

   cin.getline(array, sizeof(array),'.');

   // Eingabe wieder ausgeben
   cout << "1. Eingabe war: " << array << endl;
   // Restliche Eingabe verwerfen
   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

   // Hinweis ausgeben
   cout << "Bitte 2. Text eingeben: ";
   // Nächste Zeile einlesen
   cin.getline(array, sizeof(array),'.');
   // Eingabe wieder ausgeben
   cout << "2. Eingabe war: " << array << endl;
}
ProgrammausgabeBitte 1. Text eingeben: Erster Satz. Zweiter Satz.
1. Eingabe war: Erster Satz
Bitte 2. Text eingeben: Letzter Satz. Das war's!
2. Eingabe war: Letzter Satz

Im Beispiel wird für die Berechnung der maximal einzulesenden Zeichen beim Aufruf der Memberfunktion getline(...) der Operator sizeof verwendet. sizeof ist ein Standard C++-Operator, der den von einer Variable oder eines Datentyps belegten Speicherplatz in Bytes zurückliefert. Im Beispiel liefert sizeof(array) die Größe des Eingabepuffers array, hier also 40.

Die erste Eingabe soll nun beendet werden, wenn mind. 39 Zeichen oder aber ein Punkt eingegeben wird. Diese Eingabe wird dann zur Kontrolle ausgegeben. Beachten Sie bei der Ausgabe, dass nur die Eingabe bis zum Punkt in das Feld übernommen wurde. Die restlichen eingegebenen Zeichen befinden sich aber noch im Eingabepuffer. Um diese Zeichen zu verwerfen wird die Memberfunktion ignore(...) des Eingabestreams aufgerufen. Sie können auch einmal ausprobieren was passiert, wenn Sie den Aufruf von ignore(...) entfernen.