Eingaben mit std::cin lesen und prüfen
std::cin ist der Standardeingabestrom. Seine Daten kommen häufig von der Tastatur, können aber auch aus einer umgeleiteten Datei stammen. >> heißt hier Extraktionsoperator: Er versucht, einen passenden Wert aus der Eingabe zu lesen.
Eingaben mit std::cin lesen und prüfen#
Ein- und Ausgabe · Lektion 9 von 60
Voraussetzungen: Ausgabe, main. Lernziel: Du verwendest eine eingegebene Zahl nur nach erfolgreicher Prüfung.
std::cin ist der Standardeingabestrom. Seine Daten kommen häufig von der Tastatur, können aber auch aus einer umgeleiteten Datei stammen. >> heißt hier Extraktionsoperator: Er versucht, einen passenden Wert aus der Eingabe zu lesen.
1#include <iostream>2 3int main() {4 int alter{};5 std::cout << "Wie alt bist du? ";6 if (!(std::cin >> alter)) {7 std::cerr << "Bitte eine ganze Zahl eingeben.\n";8 return 1;9 }10 if (alter < 0 || alter > 130) {11 std::cerr << "Das Alter muss zwischen 0 und 130 liegen.\n";12 return 1;13 }14 std::cout << "Alter: " << alter << '\n';15}Neue Begriffe im Beispiel#
Eine Variable ist ein benannter Speicherplatz für einen Wert. int alter{}; legt eine ganze Zahl namens alter an und initialisiert sie hier mit null. Initialisieren heißt, den Anfangswert festzulegen. std::cin >> alter versucht, diesen Wert durch die Eingabe zu ersetzen.
if bedeutet „wenn“. Es führt den folgenden Block bei wahrer Bedingung aus. ! ist die logische Verneinung. Der Stream kann auf Erfolg oder Fehlschlag geprüft werden; die Klammern bedeuten hier „wenn das Einlesen nicht erfolgreich war“. || heißt „oder“, < „kleiner als“ und > „größer als“. Das if-Kapitel erklärt Bedingungen ausführlich.
Zwei verschiedene Prüfungen#
Formatprüfung beantwortet: Konnte eine ganze Zahl gelesen werden? Bereichsprüfung beantwortet: Ist diese Zahl für die Aufgabe erlaubt? -8 ist eine gültige ganze Zahl, aber kein erlaubtes Alter im Beispiel. Eine riesige Zahl außerhalb des int-Bereichs kann bereits beim Einlesen scheitern.
Formatierte Eingabe überspringt gewöhnlich führende Leerzeichen und Zeilenumbrüche. Sie verlangt nicht automatisch, dass die komplette Zeile nur aus einer Zahl besteht. Bei 12abc kann das Lesen der Zahl 12 gelingen und abc im Stream bleiben. Für eine vollständig geprüfte Zeile siehe getline.
Fehlerzustand und Eingabeende#
Nach einem Formatfehler setzt der Stream einen Fehlerzustand. Weitere Leseversuche funktionieren dann nicht einfach durch erneutes >>. clear() setzt Statusflags zurück; ignore() kann unbrauchbare Zeichen verwerfen. Flags sind hier gespeicherte Zustandsmerkmale. Eine Wiederholung zeigt Schleifen in der Praxis.
EOF, End of File, bezeichnet das Ende der Eingabequelle. Auch Tastatureingabe kann beendet werden. Reagiere mit kontrolliertem Programmende statt einer Endlosschleife. Ein alter Wert darf keinen fehlgeschlagenen Leseversuch ersetzen.
Übung#
Teste 23, -1, abc und eine sehr große Zahl.
Lösung
23 wird akzeptiert, -1 scheitert an der Bereichsprüfung und abc an der Formatprüfung. Eine nicht darstellbare Zahl muss ebenfalls als fehlgeschlagene Eingabe behandelt werden.
Weiterlernen#
Zurück: Escape-Sequenzen, Sonderzeichen und Raw Strings · Kursübersicht · Weiter: Ganze Zeilen und Eingaben mit Leerzeichen
Kommentare 0
Kommentare sind für diese Seite deaktiviert.