Die cin-Funktion haben Sie in einem der letzten Kapitel kennengelernt als es um die Eingabe von numerischen Werten ging. Diese Funktion kann auch verwendet werden, um eine Zeichenkette einzugeben. Einzige Einschränkung: cin kann nur ein einzelnes Wort entgegennehmen, nach einem Leerzeichen wird der Text in den Eingabespeicher geschrieben.
Für die Eingabe einer Zeichenkette aus mehreren Worten einschließlich der Leerzeichen ist die Funktion getline() besser geeignet.
Wenn Sie einem Benutzer die Eingabe einer string-Variablen ermöglichen wollen, wie zum Beispiel einen ganzen Satz, können Sie die getline()-Funktion dazu benutzen. Diese Funktion erfordert zwei Argumente, welche die Quelle und das Ziel des Strings festlegen. Im folgenden Beispiel ist cin die Quelle und str das Ziel:
getline (cin, str);
In diesem Fall nimmt die Funktion Zeichen entgegen bis sie auf das Steuerzeichen \n für neue Zeile trifft. Dieses Zeichen wird automatisch eingefügt, wenn die Eingabetaste gedrückt wurde.
Etwas Vorsicht ist bei der Kombination von cin und getline() angebracht. Die getline() Funktion liest beim Aufruf alles was im Eingabepuffer steht. Den genauen Zusammenhang erkennen Sie, wenn Sie das folgende Programmbeispiel ausführen:
Übung: Zeichenketten eingeben
Programm: input.cpp
#include <string>
#include <iostream>
using namespace std;
int main()
{
string name;
//name wird einer string-Variablen zugeordnet und ausgegeben
cout << „Bitte geben Sie Ihren Namen ein: „;
cin >> name;
cout << „Willkommen “ << name << endl;
//name wird an die Funktion getline() übergeben
cout << „Bitte geben Sie Ihren Namen noch einmal ein: „;
getline (cin, name);
cout << „Danke, “ << name << endl;
system(„pause“);
return 0;
}
Speichern Sie das Programm, kompilieren Sie es anschließend und schauen Sie sich das Ergebnis an.
Dieses unbefriedigende Ergebnis zeigt, das cin nach dem ersten Leerzeichen das Lesen der Eingabe abbricht. Der zweite Teil des Namens verbleibt im Eingabespeicher und wird durch die Funktion getline() ausgelesen. Das Problem entsteht dadurch, dass cin das Zeichen \n für eine neue Zeile in den Speicher schreibt, wenn die Eingabetaste gedrückt wird.
Eine Lösung für das Problem bietet die Funktion ignore(). Wird diese Funktion vor der getline()-Funktion platziert, wird der Inhalt des Eingabespeichers ignoriert. Ändern Sie das Programm, indem Sie vor der Funktion getline() die Zeile
cin.ignore(256, '\n');
eingeben. Der erste Parameter enthält die Anzahl der zu überspringenden Zeichen, im zweiten Parameter steht das Abbruchzeichen. Der Computer ignoriert alles was sich im Eingabespeicher befindet und nimmt einen String entgegen, bis das Zeichen \n für die Eingabetaste erscheint. Kompilieren Sie das Programm noch einmal und achten Sie auf die geänderte Ausgabe.
Dieser Artikel ist Teil unseres kostenlosen Workshops “C++ Programmieren lernen” – Geeignet für Einsteiger und Fortgeschrittene. Machen auch Sie mit und lernen Sie in 50 Artikeln, wie Sie Programme selbst schreiben!
Artikelbild: Fotolia / bramgino