Mit printf () für die Ausgabe

Die meisten Beispiele, die Sie von C ++ sehen den sogenannten Stream-Ausgabe für den Code verwenden. Stream-Ausgang verwendet der lt; lt;

Betreiber, wie in diesem Beispiel gezeigt:

cout lt; lt; "Der Name des Benutzers ist" lt; lt; sUsername lt; lt; endl-

Jedoch erbt C ++ eine andere Form der Ausgabe von seinem Vorgänger, C. Diese Form wird auf einem Satz von Funktionen basieren, die sehr ähnlich sind sowohl im Aussehen und in der Art, wie sie funktionieren. Zusammen diese Funktionen den Namen ihres am weitesten verbreitete Mitglied tragen, printf ().

Sie können diesen Artikel ignorieren und Ausgabe mit Strom, oder Sie können zu wechseln printf () ausgegeben, wenn Sie bevorzugen - aber Sie sollten die beiden im selben Programm nicht mischen. Diese Sätze von Funktionen verwenden unterschiedliche Klassen für die Pufferung der Ausgabe die Anzahl der Plattenzugriffe zu reduzieren, wodurch sich die Programmleistung. die beiden Misch bewirkt Ausgabe in unvorhersehbarer Weise verschachtelt zu bekommen, was zu verwirrend und vielleicht sinnlos ausgegeben.

Die allgemeine Form der printf () -Ausgabe

Das printf () Funktion hat den folgenden Prototyp in die definierte cstdio einschließen Datei:

int printf (const char * Format, ...) -

die Ellipsen (...) in einem Prototyp Erklärung bedeutet eine beliebige Anzahl von jeder Art von Variablen.

Das erste Argument printf () ist eine Zeichenkette ausgegeben wird. Wenn diese Zeichenfolge enthält Formatbezeich, die Zeichen, die durch eine voran sind '%', dann printf () gibt das nächste Argument in Zeile, die Formatbezeichner als Führung verwenden.

Dies wird am besten mit einem einfachen Beispiel veranschaulicht:

int i 10-double d = 20,0-printf = ( "i =% d, d =% f", i, d) -

Dies würde die Ausgabe der Zeichenfolge

i = 10, d = 20,0000

Es müssen mindestens so viele Argumente nach dem Format-String sein, da es den Formatbezeich im String sind. Wenn es mehr, werden sie ignoriert. printf () gedruckt gibt die Anzahl der Zeichen. Wenn ein Fehler auftritt, wird diese Zahl negativ sein.

Formatbezeichner

Formatangaben haben die Form

% [Flags] [Breite]. [Präzision] [Länge] Typspezifizierer

Jedes dieser Formatbezeich wird in den folgenden Abschnitten beschrieben.

Typdeklarierer

Die folgenden Typdeklarierer zur Verfügung zu printf ()

TypspezifiziererArtBeispiel
d oder ichSigned Dezimalzahl-123
uUnsigned Dezimalzahl456
OUnsigned oktal05670
xUnsigned hexadezimal (klein geschrieben)89abc
XUnsigned hexadezimal (Großbuchstaben)89ABC
f, FGleitpunktberechnungen123.456
eDie wissenschaftliche Schreibweise (Kleinbuchstaben)1.23456e + 2
EDie wissenschaftliche Schreibweise (Groß-)1.23456E + 2
GJe kürzer der f oder e
GJe kürzer der F oder E
einHexadezimal Gleitkomma (klein geschrieben)
EINHexadezimal Gleitkomma (Großbuchstaben)
cCharakterc
sverkohlen* (ASCIIZ string)Beispiel
pPointer-Adressebc080
%Das % Charakter%

Es ist mindestens ein Typ Spezifizierer für jeden der Variablentypen intrinsische C ++. In Ermangelung weiterer Informationen verwendet C ++ Standardwerte. Beispielsweise mit a eine ganze Zahl ausgegeben d ist mit einem voran - wenn sie negativ ist, aber nicht mit etwas voraus, wenn es positiv ist. Zusätzlich können solche nimmt einen Wert nur so viele Felder, wie die Ausgabe der Anzahl benötigt werden.

Der Ausgangsverstärker Fahnen

Was ist, wenn das Standardanzeigeformat für eine ganze Zahl Bezeich wie d ist nicht das, was Sie wollen? Beispielsweise für einige Anwendungen kann es wichtig sein, dass positive Zahlen, die durch ein vorangestellt + (Pluszeichen) in der gleichen Weise, Negative durch eine vorausgeht - (Minuszeichen). Dafür, printf () stellt diese Ausgangsverstärker Flags.

FlaggeBetrieb auf TypHat folgende Wirkung
-alleLinker Ausgang rechtfertigen.
+numerischPrecedes positive Zahlen mit einem +. Negativenumbers werden immer durch ein voran -.
RaumnumerischLegen Sie eine leere, wenn kein Zeichen geschrieben werden wird.
#o, x oder XPrecede Zahl mit 0, 0x, oder0X.
#a, A, E, E, F, F, G, GFügen Sie ein Komma, selbst wenn der Bruchteil von thenumber Null ist.
0Nummerlinks; Pad die Zahl mit Nullen (nützlich beim Drucken dollaramounts).

Ausgabebreite Flagge

Nehmen wir an, dass Sie alle Zahlen in einer Spalte wollen ausrichten. In diesem Fall wäre es wichtig, dass jede Zahl, die die gleiche Anzahl von Räumen selbst einnehmen, wenn nicht alle diese Räume den Wert anzuzeigen benötigt. Für diese und Tausende von anderen Anwendungen, printf () ermöglicht es dem Benutzer unter Verwendung dieser Breite flags die Breite angeben.

BreiteBedeutung
NummerDie Mindestanzahl von Zeichen für thisfield zuzuteilen.
*Die Breite wird in einem Integer-Argument zu speichernprintf () vor der Zahl formatiert werden.

Präzisions-Flagge

Die Präzision Flagge wird am häufigsten mit der Breite Flagge kombiniert, wenn Fließkommazahlen anzeigt. In diesem Fall sagt die Präzision flag printf () wie viele Stellen nach dem Komma angezeigt werden soll.

Die Präzision Flagge wurde, die von Gleitkomma Bedeutung für Typen gegeben, wie hier gezeigt, aber diese sind weniger häufig verwendet.

PräzisionBetrieb mit TypHat die folgende Wirkung
Nummerd, i, o, u, x, X
(Integer-Typen)
Die Mindestanzahl von Zeichen auszugeben. Pad auf der leftwith 0 ist, falls erforderlich.
Nummera, A, E, E, F, F
(Floating-Point-Typen)
Die Anzahl der Stellen nach dem Komma zu drucken.
Nummerg, G
(Floating-Point-Typen)
Die maximale Anzahl von signifikanten Ziffern werden gedruckt.
Nummers
(Zeichenkette)
Die maximale Anzahl von Zeichen auszugeben.
leeralleEine Periode nicht gefolgt von einer Zahl ist die gleiche wie eine Präzisions OF0.
*alleDie Genauigkeit wird in einem Integer-Argument zu speichernprintf () vor der Zahl formatiert werden.

Länge Fahnen

Im Gegensatz zu den Fahnen oben diskutiert wurde, ist die Länge Flag nicht so viel zu erzählen, printf () wie die Nummer anzuzeigen, aber mehr zu erzählen, printf () über die Zahl selbst. Beispiel: Angenommen, Sie ausgeben möchten eine Variable ein mit d Format, aber diese Variable ist tatsächlich ein long int? Kein Problem, nutzen Sie einfach ld,wie hier beschrieben.

Länged, iu, o, x, Xdezimalcs
keinerimunsigned intdoppeltintverkohlen*
hhsigned charunsigned char
hkurz unterzeichnetunsigned short
llangeunsigned long wchar_twchar_t *
lllange langeunsigned long long
L long double

Die Überprüfung der Vor- und Nachteile der printf ()

Das printf () Stil-Ausgang hat einen entscheidenden Vorteil gegenüber Stream-Ausgabe: die Grammatik extrem kurz und bündig ist. Sobald Sie beherrschen alle die speziellen Typen und Längen, Breiten und Präzisierungen, Sie können die Ausgabe eine Variable in fast jede Weise, die Sie mit einer minimalen Anzahl von Tastenanschlägen möchten.

Die Prägnanz kommt mit einem Preis, aber:

  • Die Prägnanz macht printf () Ausgang schwierig für den Uneingeweihten zu verstehen.

  • printf () ist nicht sicher geben.

    Wenn Sie die Ausgabe sagen das nächste Feld ein mit % Lf, dann printf () davon aus, dass ein langer Doppel dort wartet. Es hat keine Möglichkeit, Scheck zu verdoppeln. Wenn eine einfache Doppel- oder (Gott bewahre!) Eine ganze Zahl ist die nächste Variable auf dem Stapel, dann printf () ausgibt Müll. Schlimmer noch, es wird nach vorne, da nun nicht mehr synchron die Spezifizierer zur Ausgabe von Müll von diesem Punkt fortsetzen und die Argumente sind.

  • printf () ist nicht erweiterbar.

    Die Autoren printf () dachte an viele verschiedene Arten von Variablen, aber wenn sie nicht daran gedacht, dann bist du kein Glück.

Menü