Page updated: 19. Februar 2009
Inhalt: Variable - Datentypen - Eingabe - Länderspezifisch
Demoprogramm eingabe.cpp
Namensbildung: Wie bei C.
Deklaration von Variablen: Variable müssen
deklariert (vereinbart) werden, bevor man sie im Programm benutzen
kann. Die Deklaration kann in C++ zwar jederzeit im Rumpf der
Funktion main() erfolgen, bevor die Variable benutzt wird,
jedoch ist es ein schlechter Programmierstil, die Deklarationen
über den Rumpf zu "verstreuen": deklarieren Sie besser die
Variablen gleich zu Beginn des Rumpfes der Funktion main(), lokale
Deklaration genannt. Bei der Deklaration legt man Namen der
Variablen und ihren Datentyp fest. Variablen können mit einem
Anfangswert besetzt werden. Mehrere Variablen gleichen Typs
können mit einer Deklaration vereinbart werden. Die Syntax
einer Variablendeklaration ist mit der von C identisch.
Datentypen. |
TOP 
|
Es gelten die gleichen Datentypen wie bei C, jedoch gibt es
zusätzliche Datentypen für Boole'sche Daten
und Zeichenketten. Bei der Verwendung von Zeichenketten im
C++ Stil müssen Sie die Headerdatei string über die Praeprozessoranweisung
#include einbinden.
Zu C zusätzliche Datentypen bei
C++
|
Byte |
Wertebereich |
bool |
1 |
true, false |
string |
dynamisch
|
beliebig viele Zeichen aus dem Zeichensatz
|
Bei Variable vom Datentyp string handelt es sich um
dynamische Variable, d.h. Sie brauchen nicht wie bei C die Anzahl
der max. aufzunehmenden Zeichen festlegen. Die Größe des
Speicherplatzes paßt sich der jeweils aktuellen Länge
der Zeichenkette an.
- Beispiel:
string Willkommen="HALLO";
Eingabeinstanz
cin. |
TOP 
|
Sie müssen die Headerdatei iostream über die Praeprozessoranweisung
#include einbinden, damit die Instanz
cin zur Konsoleneingabe dem Compiler bekannt ist.
- Syntax:
<Eingabe mit cin> ::= cin >> <Variable> [>> <Variable>]...
;
Bei sämtlichen Eingaben mit cin ist zu beachten, daß
diese gepuffert werden. Aus diesem Eingabepuffer werden dann erst
die Daten herausgelesen. Alle Eingaben, die nicht aus dem Puffer
gelesen worden sind - das sind in der Regel fehlerhafte
Eingabezeichen und das Linefeed Tastenzeichen - verbleiben im
Eingabepuffer und werden von einem später folgendem
Eingabebefehl erneut gelesen. Dadurch kann es zu unerwarteten,
nicht beabsichtigten und falschen weiteren Eingabefehlern kommen.
Deshalb sollten Sie den Tastaturpuffer nach jeder Eingabe
leeren:
- Bei Zahleneingaben (jedoch nicht bei Zeicheneingaben,
bei Zeichenketten s. weiter unten) verwenden Sie zuerst die
Methode clear(), um im Falle von alleiniger Eingabe ohne
Ziffern den Status des Tastaturpuffers zurück zu setzen (sonst
ist keinerlei weitere Eingabe und das Leeren des Tastaturpuffers
bei 2. nicht möglich):
cin.clear(); // Nur bei Zahleneingaben!
- Dann den Eingabepuffer leeren (Ausnahme Zeichenketten s. weiter
unten):
while (cin.get() != '\n'); // Bei Zahlen und
Einzelzeichen
Sollten Sie für Ausgaben in C++ Programmen sowohl cin und
scanf() gemeinsam benutzen, müssen Sie beide Ausgabearten
mit der Methode cin.sync_with_stdio() synchronisieren: cin.sync_with_stdio();
Manipulatoren dienen der Eingabeformatierung und können
als Ausdruck in cin verwendet werden. Zur Benutzung ist die
Headerdatei iomanip
einzubinden.
dec
|
Dezimalkonvertierung (Standard).
|
hex
|
Hexadezimalkonvertierung.
|
oct
|
Oktalkonvertierung.
|
setw(<Breite>)
|
Breite für das Eingabefeld setzen.
|
Weiterhin weisen die Stream Klassen Methoden auf, mit denen
ebenfalls die Eingaben beeinflußt werden können. Die
Methode cin.setf() setzt die Flags von cin, die Methode
cin.unsetf() nimmt die Flags von cin wieder zurück:
cin.setf(ios::<Flag>[, ios::<Flag>])
cin.unsetf(ios::<Flag>[, ios::<Flag>])
Als Flags können verwendet werden:
dec
|
Dezimalkonvertierung.
|
hex
|
Hexadezimalkonvertierung.
|
oct
|
Oktalkonvertierung.
|
Besonderheiten bei der Eingabe von
Zeichenketten:
Da das Leerzeichen standardmäßig Eingeben voneinander
trennt, können mit cin keine Zeichenketten mit Leerzeichen
eingelesen werden. Zum Einlesen von Zeichenketten mit
Leerzeichen verwende man:
- Zum Einlesen von C Stil Strings mit Leerzeichen
cin.getline():
cin.getline(<C
Stringvariable>, <Länge
der C Stringvariablen>);
Der Tastaturpuffer wird geleert mit:
if (cin.fail())
{
cin.clear();
while (cin.get() != '\n');
}
- Zum Einlesen von C++ Stil Strings mit Leerzeichen
sollten Sie derzeit nicht die in der STL dafür
vorgesehene Funktion getline() verwenden, da viele Compiler noch
nicht die STL konsequent umgesetzt haben. Verwenden Sie statt
dessen den folgenden Code:
while (<Zeichenvariable>
!= '\n')
{
<C++ Stringvariable> = <C++ Stringvariable>
+
<Zeichenvariable>;
<Zeichenvariable> = (char) cin.get();
}
Landesspezifische
Eingabe. |
TOP 
|
Um landesspezifische Standards bei Ein- und Ausgaben (Dezimalkomma) bei cin() zu setzen, müssen Sie die Headerdatei locale über die
Praeprozessoranweisung #include einbinden und die imbue() Methode bei cin benutzen. "german" ermöglicht die Eingabe des Dezimalkommas, "english" die Eingabe des Tausendertrenners Komma und des Dezimalpunkts, "C" ist der C/C++ Standard ohne Tausendertrenner mit Dezimalpunkt:
cin.imbue(locale("german"));
cin.imbue(locale("english"));
cin.imbue(locale("C"));
Um landesspezifische Standards bei Ein- und Ausgaben (Dezimalkomma)
bei printf() und scanf() in C++ Programmen zu setzen,
müssen Sie die Headerdatei clocale über die Praeprozessoranweisung
#include einbinden und die
setlocale() Funktion benutzen. Siehe -> C. Die Einstellung gilt für
Ein- und Ausgaben.
Dr. J. Kubiak j.kubiak@gmx.net