C Variable, Eingaben


Page updated: 3. April 2005


Inhalt: Variable - Datentypen - Eingabe - Länderspezifisch

Demoprogramm eingabe.c


Item Variable. TOP TOP

Namensbildung: Generell, also auch bei Variablen, werden Namen in C wie folgt gebildet:
  1. Als Zeichen für Namen sind erlaubt: Buchstaben a bis z und A bis Z (jeweils ohne deutsche Umlaute), Ziffern 0 bis 9 und der Unterstrich  _  .
  2. Der Name muß mit einem Buchstaben oder dem Unterstrich beginnen.
  3. Nach dem ersten Buchstaben können (müssen aber nicht) weitere Buchstaben, Ziffern, Unterstriche in beliebiger Kombination folgen.
  4. Namen dürfen nicht so gewählt werden, daß sie mit reservierten Worten der Programmiersprache übereinstimmen.

Deklaration von Variablen: Variable müssen deklariert (vereinbart) werden, bevor man sie im Programm benutzen kann. Die Deklaration erfolgt gleich zu Beginn des Rumpfes der Funktion main(), lokale Deklaration genannt, und legt dadurch die 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.
Item Datentypen. TOP TOP

Folgende Datentypen sind in C vorgegeben:

Datentypen Byte Wertebereich
char 1  -128 ... 127
unsigned char 1  0 ... 255
short int 2  -32768 ... 32767   *)
int 4  -2147483648 ... 2147483647   *)
unsigned int 4  0 ... 4294967295   *)
long 4  -2147483648 ... 2147483647   *)
 unsigned long
4  0 ... 4294967295   *)
float 4  ±3.4E-38 ... ±3.4E+38
double 8  ±1.7E-308 ... ±1.7E+308
char 1  1 Zeichen von 256 des Zeichensatzes

*) Der ANSI Standard (4.14/2.2.4.2 Limits of integral types) schreibt nur folgendes für den Wertebereich nachstehende Datentypen vor: short int <= int <= long. Obige Angaben üblich für Compiler auf einem 32-Bit Betriebssystem. Genaueres siehe Manual des Compilers.


Zeichenketten sind in C kein selbständiger Datentyp, sondern werden als Feld von mehreren Zeichen deklariert. Sie geben bei der Deklaration den Datentyp char an, einen Namen für die Variable, gefolgt mit der Angabe der maximalen Zeichenanzahl + 1 (als ganzzahlige Konstante) in eckigen Klammern:
Warum muß die Angabe der max. Anzahl der Zeichen um 1 größer sein, als Zeichen vorliegen? Weil es sich um sogenannte NUL Terminated Strings handelt: Das Ende einer Zeichenkette muß durch das Zeichen NUL (Zeichen Nummer 0 des Zeichencode) begrenzt werden - dieses beansprucht aber ebenfalls 1 Byte Platz!
Item Eingabefunktion scanf(). TOP TOP

Sie müssen die Headerdatei stdio.h über die Praeprozessoranweisung #include einbinden, um die scanf() Funktion benutzen zu können. Bei fehlerfreier Ausführung liefert scanf() die Anzahl (0 oder größer) der eingelesenen Bytes zurück. Im Fehlerfall gibt scanf() Die EOF Marke zurück (engl. End Of File, spezielle ASCII Sequenz zur Kennzeichnung des Dateiendes). Bei allen Variablen mit Ausnahme von Zeichenkettenvariablen ist vor den Variablennamen das kaufmännische & Zeichen voran zu stellen!
Der Kontrollstring spezifiziert mit Formatbezeichnern, wie die Eingaben eingelesen werden. Zeichen hinter dem Formatbezeichner werden als Trennzeichen (engl. delimiter) zur Beendigung des einzulesenden Datenwertes definiert. Standardmäßig beendet bei der Eingabe das ENTER Zeichen (ASCII Zeichen 10, Linefeed) oder das Leerzeichen die Eingabe eines Wertes.

Ein Formatbezeichner wird immer mit dem Prozentzeichen % eingeleitet gefolgt von der Typenangabe. Die Angabe von Prozentzeichen und Typ sind unbedingt nötig.
Der Suchbereich [ ] gilt automatisch für den Typ String, das Typ-Zeichen s für String entfällt in diesem speziellen Fall. Zeichen, die bei der Eingabe auf der Tastatur in den Suchbereich fallen, werden eingelesen. Beim ersten eingegebenen Zeichen, das nicht in den Suchbereich fällt, wird der Eingabebefehl abgebrochen und es verbleibt mit den eventuell nachfolgend eingegebenen Zeichen im Tastaturpuffer (s. weiter unten).

Die Regeln zur Bildung eines Suchbereiches:
  1. Alle Zeichen in eckigen Klammern, mit Ausnahme des Bindestriches, werden als Aufzählung gültiger Zeichen interpretiert (Bsp.: [123ABC] bedeutet Ziffernzeichen 1, 2, 3 und die Buchstaben A, B, C).
  2. Ein Bindestrich wird zur Bereichskennzeichnung benutzt. Das Zeichen vor dem Bindestrich muß einen kleineren ASCII-Wert haben als das dahinter (Bsp.: [0-9] richtig und gleich [0123456789], [9-0] falsch).
  3. Der Bindestrich darf weder das erste noch das letzte Zeichen sein, sonst wird er als Zeichen und nicht als Bereichskennzeichnung interpretiert (Bsp.: [AB-] bedeutet die drei Zeichen A, B, und -).
  4. Die Zeichen zu beiden Seiten des Bindestriches müssen die Enden eines Bereiches und nicht Teil eines anderen Bereichs sein (Bsp.: [0-9-A] falsch, [0-99-A] richtig).
  5. Ein Caret (Zeichen ^) invertiert die darauf folgende Angabe (Bsp.: [^A-Z] bedeutet alle Zeichen außer Großbuchstaben von A bis Z).

Eingabepuffer: Bei sämtlichen Eingaben 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. Aus diesem Grund sollten Sie sich angewöhnen, den Eingabepuffer nach jeder Eingabe zu leeren. Die Anweisung zum Leeren des Tastaturpuffers lautet:

while (getc(stdin) != '\n');

Item Landesspezifische Eingabe. TOP TOP

Um landesspezifische Standards bei Eingaben (Dezimalkomma statt Dezimalpunkt) zu setzen, verfahren Sie so wie bei der Ausgabe in -> C: diese Einstellung gilt für Ein- und Ausgaben.


Dr. J. Kubiak j.kubiak@gmx.net