Teil 1: Grundlagen


Eingabestream cin

Die Eingabe von der Standardeingabe, dies ist in der Regel die Tastatur, erfolgt mittels des Eingabestreams cin. Die allgemeine Syntax für die Eingabe mittels cin lautet:

std::cin >> var1 [ >> var2 ...];

Nach dem Eingabestream cin folgen die Operatoren >> und die Namen der einzulesenden Variablen. Die Datentypen der Variablen können dabei beliebig gemischt vorkommen. Und auch hier muss, wie beim Ausgabestream cout, die Headerdatei iostream mit eingebunden werden.

Eingabe von numerischen Daten und Texten

Bei der Eingabe von mehreren Daten werden die einzelnen Daten durch Leerzeichen voneinander getrennt eingegeben. Die Zuordnung, Eingabe zur Variable, erfolgt von links nach rechts.

Standardmäßig werden alle numerischen Eingaben im Dezimalformat erwartet. Die Eingabe kann jedoch mit den bekannten Manipulatoren dec, hex und oct auf eine andere Zahlenbasis umgestellt werden.

Da die Daten durch Leerzeichen getrennt werden, wird für jedes eingegebene Wort ein eigenes char-Feld benötigt. Soll einen Text, der aus mehreren Wörtern besteht eingelesen werden, so muss dies zeilenweise erfolgen (siehe nächsten Abschnitt).

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

// main() Funktion
int main()
{
    // Zwei Variablen definieren
    int intVar1, intVar2;
    // Daten einlesen
    cout << "Bitte zwei int-Werte eingeben: ";
    cin >> intVar1 >> intVar2;
    // intVar1 durch intVar2 dividieren
    cout << "Berechnung intVar1/intVar2: ";
    cout << intVar1 / intVar2 << endl;
    // Division nun als Gleitkommazahlen
    cout << "Berechnung static_cast<float>(intVar1) / static_cast<float>(intVar2): ";
    cout << static_cast<float>(intVar1) / static_cast<float>(intVar2) << endl;
    // Aber dies ist KEINE Gleitkommadivision, lediglich das
    // Ergebnis der Divsion ist eine Gleitkommazahl
    cout << "Berechnung static_cast<float>(intVar1 / intVar2):";
    cout << static_cast<float>(intVar1 / intVar2) << endl;
    // Zwei char-Felder definieren fuer max. 10 Zeichen
    const int SIZE = 11;
    char feld1[SIZE], feld2[SIZE];
    // Zwei Woerter einlesen mit max 10 Zeichen
    cout << "Bitte 2 Woerter mit max. 10 Zeichen eingeben: ";
    cin >> feld1 >> feld2;
    cout << "Eingabe war: " << feld1 << ',' << feld2 << endl;
}

Einlesen von Zeilen

Eingaben die Leerzeichen enthalten können nur zeilenweise eingelesen werden. Dies erfolgt mittels der cin-Memberfunktion getline(...):

istream& getline (char *pBuffer, int size);

pBuffer ist die Adresse des char-Feldes, in dem die Eingabe abgelegt wird. Und size gibt den für die Ablage der Eingabe zur Verfügung stehenden Speicher an. Da die Eingabe als C-String abgelegt wird, welcher mit einer 0 abschließt, werden maximal size-1 Zeichen im Puffer abgelegt.

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

// main() Funktion
int main()
{
    // char Feld fuer max 80 Zeichen definieren
    const int SIZE = 81;
    char line[SIZE];
    // Eine Zeile einlesen
    cout << "Bitte einen Text (max. 80 Zeichen eingeben:\n";
    cin.getline(line, SIZE);
    cout << "Die Eingabe war:\n" << line << endl;
}

Fehlerfälle

Soll mittels cin ein numerischer Wert eingelesen werden und es wird stattdessen ein nicht-numerischer Ausdruck eingegeben, so behält die einzulesende Variable ihren ursprünglichen Wert und die Eingabe verbleibt im Eingabepuffer. Dieser Fehlerfall kann abgefangen werden, indem nach dem Einlesen die cin-Memberfunktion fail() aufgerufen wird. Sie liefert true zurück, wenn die Eingabe fehlerhaft war.

Besteht die Eingabe eines numerischen Wertes am Anfang aus numerischen Zeichen gefolgt von nicht-numerischen Zeichen, so erhält die einzulesende Variable den numerischen Teil der Eingabe zugewiesen. Der Rest der Eingabe verbleibt im Eingabepuffer.

Soll sichergestellt werden, dass nach jeder Eingabe der Eingabepuffer vollständig leer ist, so kann der Eingabepuffer mittels der Memberfunktion ignore() geleert werden. 

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

// main() Funktion
int main()
{
    // int-Variable definieren und einlesen
    int var;
    cout << "Bitte int-Datum eingeben: ";
    cin >> var;
    // Pruefen ob Eingabe fehlerhaft war
    if (cin.fail() == true)
    {
        cout << "Fehlerhafte Eingabe!\n";
        // Eingabe verwerfen und Programm beenden
        cin.ignore();
        exit(1);
    }
    cout << "Eingabe war: " << var << endl;
}



Copyright © cpp-tutor.de
Impressum &Datenschutz