Nachdem wir uns das letzte Mal mit der einfachen Ausgabe von Streams beschäftigt haben, soll es heute um die Eingabe solcher gehen. Schließlich möchte der Nutzer auch mal was zu tun haben. Für diesen Zweck gibt es 2 Befehle, die dafür verwendet werden können
std::cin;
und
std::getline();
std::cin speichert nur ein Wort im std::string Format. getline hingegen einen Text in Summe. Und zwangsläufig fragt man sich dann, warum nicht gleich einfach nur getline? Die Antwort liegt im Verwendungszweck. Stell dir vor, du willst vom Benutzer jeweils nur 1 Wort haben. zB Vorname, Nachname, Geburtsdatum etc. Dadurch schließt du eine Fehlerquelle bereits aus.
Was ich erst heute erfahren habe. std::cin hat die Eigenschaft, Zeilevorschübe ("\n) im Buffer stehen zu lassen und dann auf Enter zu drücken, wenn der Nutzer wieder was eingeben soll. Für diesen Zweck gibt es
std::cin.ignore();
Im Regelfall sollte man das aber nicht brauchen müssen. Im Beispiel lassen wir den Nutzer nacheinander ein Wort und einen Text eingeben. Beide werden in verschiedenen String Variablen gespeichert.
#include
#include
int main (){
std::string wort;
std::cout << "Bitte gib ein Wort ein: ";
std::cin >> wort;
std::cout << "Dein Wort war: " << wort << "\n"; //Das \n bleibt im Buffer
std::cin.ignore();
std::cout << "Bitte gib einen Text ein: ";
std::string text;
std::getline(std::cin, text);
std::cout << "Dein Text war: " << text << "\n";
return 0;
}
Ausgabe:
Bitte gib ein Wort ein: Hallo
Dein Wort war: Hallo
Bitte gib einen Text ein: Wie gehts dir?
Dein Text war: Wie gehts dir?