Resource icon

Format-Angaben und Escape-Sequenzen für printf

Programmiersprache(n)
c gcc
Betriebssystem(e)
Linux
Hallo Leute!

Hier mal eine kleine Übersicht über die Formatangaben und Escape-Sequenzen für printf.
Einige haben beim gcc-compiler Schwierigkeiten bei der Formatierung für float, double und long double.
Zunächst mal ein kleines Beispiel:
Code:
/** Zeigt die Verwendung von Formatangaben und Escape-Sequenzen fuer printf*/
#include <stdlib.h>

int main()
{
float fzahl,fb;
fzahl = 12345.6789;
fb = 1234567890.23423423;
double lda, ldb;
long double loda;
lda = 12345.6789;
ldb = 1234567890.23423423;
loda = 123456789012.23423423;

printf("Zeigt die verschiedenen Arten der Ausgabe von Fliesskommazahlen an:\n");

printf("%f\n", fzahl);
printf("%e\n", fzahl);
printf("%E\n", fzahl);
printf("%g\n", fb);
printf("%G\n", fb);
fb = 12345678.9023423423;
printf("%g\n", fb);
printf("%G\n", fb);
fb = 1234567.89023423423;
printf("%g\n", fb);
printf("%G\n", fb);
fb = 123456.789023423423;
printf("%g\n", fb);
printf("%G\n", fb);
fzahl = 12345.6789;
fb = 1234567890.23423423;

printf("Nun für double:\n");

printf("%lf\n", lda);
printf("%le\n", lda);
printf("%lE\n", lda);
ldb = 1234567890.23423423;
printf("%lg\n", ldb);
printf("%lG\n", ldb);
ldb = 12345678.9023423423;
printf("%lg\n", ldb);
printf("%lG\n", ldb);
ldb = 1234567.89023423423;
printf("%lg\n", ldb);
printf("%lG\n", ldb);
ldb = 123456.789023423423;
printf("%lg\n", ldb);
printf("%lG\n", ldb);
printf("Jetzt fuer long double:\n");
printf("%Lf\n", loda);
printf("%Le\n", loda);
printf("%LE\n", loda);
printf("%Lg\n", loda);
printf("%LG\n", loda);  //bei double kleines l, bei long double großes L als Formatangabe

printf("Escape-Sequenzen:\n\n");

printf("1\t2\v33\b4\r5\a\'\"\\\n\136=%c   \x030=%c\n", 94, 48);

return 0;
}
Nun die Ausgabe auf der Konsole:
Code:
12345.678711
1.234568e+04
1.234568E+04
1.23457e+09
1.23457E+09
1.23457e+07
1.23457E+07
1.23457e+06
1.23457E+06
123457
123457
Nun für double:
12345.678900
1.234568e+04
1.234568E+04
1.23457e+09
1.23457E+09
1.23457e+07
1.23457E+07
1.23457e+06
1.23457E+06
123457
123457
Jetzt fuer long double:
123456789012.234238
1.234568e+11
1.234568E+11
1.23457e+11
1.23457E+11
Escape-Sequenzen:

1       2
5'"\     34
^=^   0=0
Wie oben gesehen muss man beim Datentyp double %lf und bei long louble %Lf nehmen. Weiteres siehe obriges Beispiel. Zumindest auf meinem compiler (gcc 8.2.1 Linux, 64bit) habe bei dem Versuch, mit
Code:
long double ldzahl;
scanf("%lf", &ldzahl);
eine Fehlermeldung erhalten.
mit
Code:
long double ldzahl;
scanf("%Lf", &ldzahl);
keine mehr.

Nun zu den Escape-Sequenzen, bevor man sich im Web einen Wolf sucht:
'\n' führt eine Zeilenvorschub durch (feed line)
'\t' setzt Horizontaltabulator
'\v' setzt Vertikaltabulator
'\b' geht ein Zeichen zurück
'\r' führt einen Wagenrücklauf durch
'\f' führt einen Seitenvorschub durch (von mir nicht getestet)
'\a' löst ein Klingelzeichen aus (auch auf der Linux-Konsole)
'\’' Hochkomma
'\"' Anführungszeichen
'\ddd' ASCII-Zeichen in Oktalnotation
'\xddd' ASCII-Zeichen in Hexadezimalnotation

Noch eine kleine Information über das deutsch Eszett (ß).
Hier einmal zur besseren Erklärung eine Info über die Herkunft. Bei der Ansicht des Bildes(alte Sütterlin-Handschrift), sieht man das das scharfe 's' eigentlich ein aus zwei zusammengesetzter Buchstabe ist:
zuerst ein 's' dann ein 'z'.
Zur besseren Kompatibilität habe ich ein Doppel-s statt ein scharfes s im Kommentar verwendet.

Weitere Infos dazu:
https://dudeweblog.wordpress.com/2013/04/04/uber-die-schweizer-und-das-scharf-s/
Autor
rustyoldguy
First release
Last update
Bewertung
0,00 Stern(e) 0 Bewertungen

More resources from rustyoldguy

Oben