ein Kapitel zurück                                           ein Kapitel weiter

Auf dieser Seite wollen wir noch mal alle bisher durchgenommenen Umwandlungszeichen wiederholen und die noch nicht genannten hinzufügen.

Die Umwandlungsvorgaben beginnen immer, wie sie noch von scanf() und printf() wissen sollten, mit dem Zeichen....

%

... und beziehen sich dann auch auf das oder die nachfolgenden Argumente. Zum Beispiel wissen sie das...

scanf("%d",&a);

...einen Integerwert erwartet durch das das Formatzeichen '%d'. Folglich wird...

%c

...ein char-Zeichen umgewandelt. Aber außer den bereits kennen gelernte Umwandlungszeichen können sie noch weitere Umwandlungsvorgaben machen. Bei der Formatierten Ausgabe mit printf() haben sie noch folgende Möglichkeiten.....

% F W G L U

...die Bedeutung der einzelnen Buchstaben sind...

F = [Formatierungszeichen]
W = [Weite]
G = [Genauigkeit]
L = [Längenangabe]
U = [Umwandlungszeichen]


Die Umwandlungszeichen sind die Zeichen eines bestimmten Typs die sie Ausgeben können. Hier ist die Liste, einige kennen sie ja bereits, der Umwandlungszeichen für printf().....

Umwanlungszeichen Es wird ausgegeben (eine).........
%d, %i ...vorzeichenbehaftete  ganze Dezimalzahl.
%o ...vorzeichenlose ganze Oktalzahl.
%u ...vorzeichenlose ganze Dezimalzahl.
%x, %X ...vorzeichenlose ganze Hexzahl (a,b,c,d,e,f) bei x; (A,B,C,D,E,F) bei X
%f ...Form von ddd.dddddd
%e, %E ...Form von d.ddde+-dd bzw. d.dddE+-dd  Die Exponente enthält mindestens 2 Ziffern.
%g, %G ...im e-bzw. E-Format wenn Exponent <-4 oder Genauigkeit ist, sonst im f - Format.
%c ...Form von einem Zeichen (unsigned char)
%s ...Form einer Zeichenkette
%p Ausgabe eines Zeigerwertes
%n keine Ausgabe. Dieses Argument ist ein Zeiger auf eine Ganzzahl.
%% ...das Zeichen %


Beim Einlesen eines Zeichens oder einer Zeichenkette gelten bei scanf() die selben Umwandlungszeichen wie bei printf(). Es kommt aber noch hinzu......

Umwanlungszeichen Es wird eigelesen.........
[liste] ....es werden sollange Zeichen eingelesen bis ein Zeichen eingebeben wird das nicht in 'liste' vorkommt
[^liste] ....es werden sollange Zeichen eingelesen bis ein Zeichen eingebeben wird das in 'liste' vorkommt


Machen sie sich wegen manchen Formatzeichen jetzt noch keine Gedanken, wir kommen noch im laufe des Kurses auf sie zu sprechen.

Kommen wir nun zum Formatierungszeichen welche logischerweise nicht für scanf() sondern für die Ausgabe mit printf() gedacht sind.....

Formatierungszeichen Bedeutung
- linksbündig Justieren
+ Ausgabe des Vorzeichens '+' oder'-'
Leerzeichen ist 1 Argument kein Vorzeichen wird ein Leerzeichen mitausgegeben.
0 Bei numerischer Ausgabe wird mit Nullen bis zur angegebenen Weite aufgefüllt.
# bei o bzw x,X wird mit vorangestellten 0 bzw 0x ausgegeben. Bei e,E,f wird der Wert mit einem Dezimalpunkt ausgegeben, auch wenn keine Nachkommastelle existiert.


Hier ein kurzes Beispiel dazu....

/*Download:umwand1.c*/
#include <stdio.h>

int main()
{
int i=10;

printf("| %-d\n |",i);
printf("%+d\n",i);
printf("% d\n",i);
printf("%000d\n",i);
printf("%#X\n",i);
return 0;
}

Kommen wir als nächstes zur Ausgabe der Weite. Folgende 2 Angaben können wir dazu verwenden...

Angabe Bedeutung
n Es werden mindestens n Stellen ausgegeben auch wenn der Wert weniger wie n Stellen besitzt.
* Wert des nächsten Argumentes (ganzahlig) legt die Weite fest. Bei negativen Wert wird das ganz linksbündig justiert.


Zum Beispiel.....

/*Download:umwand2.c*/
#include <stdio.h>

int main()
{
int i=10;

printf("%5d\n",i);
printf("%*d\n",i,i);

return 0;
}

Es bleibt dazu noch zu sagen, falls sie eine nicht vorhandene, oder zu kleine Weitenangabe machen, das dies nicht bewirkt das Zahlen beschnitten bzw. mehr Zeichen enthält. Beispiel...

printf("%2d\n",100);

...oder...

printf("%4d\n",100);

In beiden Fällen wird die Zahl 100 ausgegeben, egal welche Längenangaben sie machen.

Bei scanf() gilt als Weitenangabe....

scanf("%2d\n",&zahl);

Falls sie jetzt nach dieser scanf() - Eingabe-Aufforderung mehr wie 2 Ziffern eingeben z.B. 100, so wird in diesem Fall die letzte 0 nicht miteingelesen und der Wert der Zahl ist 10.


Kommen wir nun zur Genauigkeitsangabe von printf(). Der Schreibweise von Genauigkeit geht ein Punkt voran. Beispiel...

printf("%.2f\n",3.143234);

Hiermit wird die Zahl 3.143234 ausgegeben als 3.14
Das heißt aber jetzt nicht das sich der Wert der Zahl verändert wurde sondern dies bezieht sich nur auch die Ausgabe mit printf(). So bewirkt z.B. die Ausgabe von....

printf("%.2d\n",1000);

...nicht das 10 ausgegeben wurde. In diesem Fall wird dennoch die Zahl 1000 ausgegeben. Hier ein kurzes Beispiel....

/*Download:umwand3.c*/
#include <stdio.h>

int main()
{
int i=1000;
float x=1.12345;
char sagwas[] ="Hallo Welt\n";

printf("%.2d\n",i);
printf("%.2f\n",x);
printf("%.5s\n",sagwas);

return 0;
}

Kommen wir zum Schluss noch zu den einzelnen Längenangaben und deren Auswirkungen.....

Längenangabe Auswirkung
h Die Umwandlungszeichen d,i,o,u,x,X werden als short-Wert behandelt
l Die Umwandlungszeichen d,i,o,u,x,X werden als long-Wert behandelt
L Die Umwandlungszeichen e,E,f,g,G werden als long double-Wert behandelt


ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf