2.3 Zeichensätze in C
In C wird zwischen dem Basis-Ausführungszeichensatz und den Escape-Sequenzen unterschieden. Der Basis-Ausführungszeichensatz beinhaltet alle Zeichen, die für das Schreiben von Programmen verwendet werden können. Die Zeichen von Escape-Sequenzen werden hingegen erst bei der Ausführung des Programms interpretiert. Escape-Sequenzen sind spezielle Steuerzeichen, um z. B. den Cursor zu verrücken oder (unter Linux) den Bildschirm zu löschen. Die Bedeutung einiger Escape-Sequenzen ist auch vom Betriebssystem und der verwendeten Konsole abhängig. Wenn Sie z. B. die BASH kennen, werden Sie uns sicherlich darin zustimmen, dass wir alleine über die Escape-Sequenzen dieser Konsole ein ganzes Buch verfassen könnten.
2.3.1 Basis-Ausführungszeichensatz
Sie können in Ihren C-Programmen (also im Editor) die folgenden Zeichen verwenden:
-
Dezimalziffern:
1 2 3 4 5 6 7 8 9 0 -
Buchstaben des englischen Alphabets:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
-
Grafiksymbole:
! " % & / ( ) [ ] { } \ ? =
' # + * ~ – _ . : ; , | < > ^
-
Whitespace-Zeichen wie Leerzeichen, Tabulatorzeichen und Zeilenumbruch
2.3.2 Einige wichtige Escape-Sequenzen
Zum Ausführungszeichensatz von C gehören auch die Escape-Sequenzen. Dies sind in den Beispielen in diesem Buch vor allem die nicht druckbaren Zeichen innerhalb eines sogenannten String-Literals. Ein String-Literal ist in C alles, was zwischen Hochkommata steht. Escape-Zeichen werden auch oft Steuerzeichen genannt, weil sie die Ausgabe des String-Literals zusätzlich steuern und z. B. die Cursor-Position ändern oder einen Standardton hinzufügen können. Escape-Sequenzen bestehen immer aus einem Backslash und einem oder mehreren weiteren Zeichen. Die wichtigsten Escape-Zeichen sehen Sie in Tabelle 2.1.
Escape-Sequenz |
Bedeutung |
---|---|
\a |
Akustisches Warnsignal (beep), früher auch als bell bezeichnet. |
\b |
Setzt den Cursor um eine Position nach links (backspace). |
\f |
Löst einen Seitenvorschub aus. Ist bei Programmen sinnvoll, die etwas ausdrucken (formfeed). |
\n |
Setzt den Cursor an den Anfang der nächsten Zeile (newline). |
\r |
Setzt den Cursor an den Anfang der aktuellen Zeile (carriage return), löst aber keinen Zeilenumbruch aus. |
\t |
Setzt den Cursor an die nächste horizontale Tabulatorposition – meistens acht Leerzeichen weiter (horizontal tab). |
\v |
Setzt den Cursor auf die nächste vertikale Tabulatorposition (vertical tab). |
\" |
Gibt das Zeichen " aus. |
\' |
Gibt das Zeichen ' aus. |
\? |
Gibt das Zeichen ? aus. |
\\ |
Gibt das Zeichen \ aus. |
Gibt einen Oktalwert aus (beispielsweise \033 = Escape-Zeichen). n ist eine Zahl zwischen 0 und 7. |
|
\xhh |
Gibt einen Hexadezimalwert aus (h = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). |
Das folgende Listing demonstriert die Verwendung der Steuerzeichen in einem C-Programm:
00 // Kapitel2/steuerzeichen.c
01 #include <stdio.h>
02 int main(void) {
03 printf("Ich bin ein \"Blindtext\"\n");
04 printf("\tNoch mehr Text\n");
05 printf("Ich werde ueberschrieben\r");
06 printf("Von mir, einem weiteren Blindtext\n");
07 printf("Das Leer \bzeichen wird entfernt\n");
08 return 0;
09 }
Die Ausgabe des Programms lautet:
Ich bin ein "Blindtext"
Noch mehr Text
Von mir, einem weiteren Blindtext
Das Leerzeichen wird entfernt
Die Ausgabe spricht eigentlich für sich, aber trotzdem wollen wir das Beispiel ein wenig kommentieren. In Zeile (03) wird der Cursor mit \n in die nächste Zeile und das Wort Blindtext zwischen zwei Hochkommata gesetzt. Zeile (04) löst zuerst einen Tabulatorvorschub mit \t aus. Zeile (05) wird zwar ausgegeben, aber am Ende setzen wir den Cursor mit \r an den Anfang der Zeile. Daher wird die Ausgabe in Zeile (05) von der Ausgabe in Zeile (06) überschrieben. In Zeile (07) wird der Cursor zwischen einem Leerzeichen mit \b um eine Position nach links geschoben.