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;
Menu
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 ()
Typspezifizierer | Art | Beispiel |
---|---|---|
d oder ich | Signed Dezimalzahl | -123 |
u | Unsigned Dezimalzahl | 456 |
O | Unsigned oktal | 05670 |
x | Unsigned hexadezimal (klein geschrieben) | 89abc |
X | Unsigned hexadezimal (Großbuchstaben) | 89ABC |
f, F | Gleitpunktberechnungen | 123.456 |
e | Die wissenschaftliche Schreibweise (Kleinbuchstaben) | 1.23456e + 2 |
E | Die wissenschaftliche Schreibweise (Groß-) | 1.23456E + 2 |
G | Je kürzer der f oder e | |
G | Je kürzer der F oder E | |
ein | Hexadezimal Gleitkomma (klein geschrieben) | |
EIN | Hexadezimal Gleitkomma (Großbuchstaben) | |
c | Charakter | c |
s | verkohlen* (ASCIIZ string) | Beispiel |
p | Pointer-Adresse | bc080 |
% | 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.
Flagge | Betrieb auf Typ | Hat folgende Wirkung |
---|---|---|
- | alle | Linker Ausgang rechtfertigen. |
+ | numerisch | Precedes positive Zahlen mit einem +. Negativenumbers werden immer durch ein voran -. |
Raum | numerisch | Legen Sie eine leere, wenn kein Zeichen geschrieben werden wird. |
# | o, x oder X | Precede Zahl mit 0, 0x, oder0X. |
# | a, A, E, E, F, F, G, G | Fügen Sie ein Komma, selbst wenn der Bruchteil von thenumber Null ist. |
0 | Nummer | links; 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.
Breite | Bedeutung |
---|---|
Nummer | Die 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äzision | Betrieb mit Typ | Hat die folgende Wirkung |
---|---|---|
Nummer | d, i, o, u, x, X (Integer-Typen) | Die Mindestanzahl von Zeichen auszugeben. Pad auf der leftwith 0 ist, falls erforderlich. |
Nummer | a, A, E, E, F, F (Floating-Point-Typen) | Die Anzahl der Stellen nach dem Komma zu drucken. |
Nummer | g, G (Floating-Point-Typen) | Die maximale Anzahl von signifikanten Ziffern werden gedruckt. |
Nummer | s (Zeichenkette) | Die maximale Anzahl von Zeichen auszugeben. |
leer | alle | Eine Periode nicht gefolgt von einer Zahl ist die gleiche wie eine Präzisions OF0. |
* | alle | Die 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änge | d, i | u, o, x, X | dezimal | c | s |
---|---|---|---|---|---|
keiner | im | unsigned int | doppelt | int | verkohlen* |
hh | signed char | unsigned char | |||
h | kurz unterzeichnet | unsigned short | |||
l | lange | unsigned long | wchar_t | wchar_t * | |
ll | lange lange | unsigned 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.