C-Bibliothek-Funktion - sprintf () Für Integer-Spezifizierer (d, i, o, u, x, X) minus Präzision gibt die minimale Anzahl der zu schreibenden Stellen an. Wenn der zu schreibende Wert kürzer als diese Zahl ist, wird das Ergebnis mit führenden Nullen aufgefüllt. Der Wert wird nicht abgeschnitten, auch wenn das Ergebnis länger ist. Eine Präzision von 0 bedeutet, dass für den Wert 0 kein Zeichen geschrieben wird. Für e, E und f-Spezifizierer minus ist dies die Anzahl der Ziffern, die nach dem Dezimalpunkt gedruckt werden sollen. Für g - und G-Spezifizierer minus Dies ist die maximale Anzahl signifikanter Ziffern, die gedruckt werden sollen. Für s minus ist dies die maximale Anzahl der zu druckenden Zeichen. Standardmäßig werden alle Zeichen gedruckt, bis das Ende-Nullzeichen auftritt. Für c-Typ minus hat es keine Wirkung. Wenn keine Genauigkeit angegeben ist, ist der Standardwert 1. Wenn die Periode ohne einen expliziten Wert für die Genauigkeit angegeben wird, wird 0 angenommen. Die Genauigkeit wird nicht in der Formatzeichenfolge angegeben, sondern als zusätzliches Integer-Wert-Argument vor dem Argument, das formatiert werden muss. Das Argument wird als kurzes int oder unsigned short int interpretiert (gilt nur für Integer-Spezifizierer: i, d, o, u, x und X). Das Argument wird als long int oder unsigned long int für Integer-Spezifizierer (i, d, o, u, x und X) interpretiert und als breite Zeichen - oder breite Zeichenfolge für die Spezifizierer c und s. Das Argument wird als long double interpretiert (gilt nur für Gleitpunktspezifizierer minus e, E, f, g und G). Zusätzliche Argumente minus Abhängig von der Formatzeichenfolge kann die Funktion eine Folge von zusätzlichen Argumenten erwarten, die jeweils einen Wert enthalten, der anstelle jedes im Formatparameter (falls vorhanden) eingegebenen - Tags eingefügt werden soll. Es sollte die gleiche Anzahl von Argumenten wie die Anzahl von - Tags sein, die einen Wert erwarten. Rückgabewert Wenn erfolgreich, wird die Gesamtzahl der geschriebenen Zeichen zurückgegeben, mit Ausnahme des Nullzeichens, das am Ende des Strings angehängt ist, andernfalls wird eine negative Zahl im Fehlerfall zurückgegeben. Das folgende Beispiel zeigt die Verwendung der Funktion sprintf (). Lassen Sie uns das obige Programm kompilieren und ausführen, ergibt dies folgendes Ergebnis minusC library function - printf () Für Integer-Spezifizierer (d, i, o, u, x, X) minus precision gibt die minimale Anzahl der zu schreibenden Ziffern an. Wenn der zu schreibende Wert kürzer als diese Zahl ist, wird das Ergebnis mit führenden Nullen aufgefüllt. Der Wert wird nicht abgeschnitten, auch wenn das Ergebnis länger ist. Eine Präzision von 0 bedeutet, dass für den Wert 0 kein Zeichen geschrieben wird. Für e, E und f-Spezifizierer minus ist dies die Anzahl der Ziffern, die nach dem Dezimalpunkt gedruckt werden sollen. Für g - und G-Spezifizierer minus Dies ist die maximale Anzahl signifikanter Ziffern, die gedruckt werden sollen. Für s minus ist dies die maximale Anzahl der zu druckenden Zeichen. Standardmäßig werden alle Zeichen gedruckt, bis das Ende-Nullzeichen auftritt. Für c-Typ minus hat es keine Wirkung. Wenn keine Genauigkeit angegeben ist, ist der Standardwert 1. Wenn die Periode ohne einen expliziten Wert für die Genauigkeit angegeben wird, wird 0 angenommen. Die Genauigkeit wird nicht in der Formatzeichenfolge angegeben, sondern als zusätzliches Integer-Wert-Argument vor dem Argument, das formatiert werden muss. Das Argument wird als kurzes int oder unsigned short int interpretiert (gilt nur für Integer-Spezifizierer: i, d, o, u, x und X). Das Argument wird als long int oder unsigned long int für ganzzahlige Spezifizierer (i, d, o, u, x und X) und als breite Zeichen - oder breite Zeichenfolge für die Spezifizierer c und s interpretiert. Das Argument wird als long double interpretiert (gilt nur für Gleitpunktspezifizierer: e, E, f, g und G). Zusätzliche Argumente minus Abhängig von der Formatzeichenfolge kann die Funktion eine Folge von zusätzlichen Argumenten erwarten, die jeweils einen Wert enthalten, der anstelle jedes im Formatparameter (falls vorhanden) eingegebenen - Tags eingefügt werden soll. Es sollte die gleiche Anzahl von Argumenten wie die Anzahl von - Tags sein, die einen Wert erwarten. Rückgabewert Wenn erfolgreich, wird die Gesamtzahl der geschriebenen Zeichen zurückgegeben. Bei einem Fehler wird eine negative Zahl zurückgegeben. Das folgende Beispiel zeigt die Verwendung der Funktion printf (). Lassen Sie uns kompilieren und führen Sie das obige Programm, um das folgende Ergebnis produzieren minusPrintf Format Strings Von Alex Allain Standardmäßig bietet C eine große Menge an Leistung für die Formatierung der Ausgabe. Die Standardanzeigefunktion printf verwendet einen Formatstring, mit dem Sie viele Informationen zum Formatieren eines Programms festlegen können. Hinweis: Wenn Sie nach Informationen zur Formatierungsausgabe in C suchen, werfen Sie einen Blick auf die Formatierung von C-Ausgabe mit iomanip. Lets Blick auf die Anatomie eines Format-String gefolgt von einigen kurzen Beispielprogramme, um die verschiedenen Einstellungen in Aktion zu zeigen. Ich werde nicht jede einzelne mögliche Option enthalten - stattdessen ist mein Ziel, es leicht zu verstehen, die Mini-Sprache, die Sie für die Erstellung von Format-Strings verwenden können und lehren Sie, wie Sie die gemeinsame Formatierung youre am ehesten zu verwenden. Anatomie einer Formatzeichenkette Wenn Sie einen Aufruf von printf durchführen, ist die Grundidee, dass Sie eine Zeichenfolge mit einigen Buchstabenzeichen und einigen Elementen bereitstellen, die ersetzt werden sollen. Zum Beispiel eine Zeichenfolge wie: Wird buchstäblich gedruckt, wie es erscheint. Während es manchmal genug ist, buchstäblich in Ihren Code schreiben genau das, was Sie drucken möchten, wollen Sie normalerweise etwas Zauberer - entweder die Einführung von Sonderzeichen mit Escape-Sequenzen oder die Einführung von Variablen-Werte mit Format-Spezifizierer. Escape-Sequenzen Es gibt einige Zeichen, die Sie nicht direkt in einen String eingeben können. Dies sind Zeichen wie eine Newline, die mit einer speziellen Syntax dargestellt werden muss. Diese werden als Escape-Sequenzen bezeichnet und sehen so aus: Hier haben Ive die Zeilenumbrüche zwischen jedem Buchstaben, a, b und c eingegeben. Jede Escape-Sequenz beginnt mit einem Backslash () - Zeichen. Die wichtigsten Escape-Sequenzen, die youll verwenden sind: n, um eine Zeilenumbringung setzen, und t, um in einem Tab. Da ein Backslash normalerweise den Beginn einer Escape-Sequenz anzeigt, wenn Sie eine Escape-Sequenz einfügen möchten, die Sie verwenden müssen, um einen Backslash anzuzeigen: Wie Sie einen Windows-Pfad in C schreiben. Ein weiterer erweiterter Trick, der Sie ist Kann ltnumgt schreiben, um das durch den Wert num dargestellte ASCII-Zeichen anzuzeigen. Dies ist nützlich, wenn Sie ein Zeichen anzeigen möchten, das Sie nicht leicht auf Ihrer Tastatur eingeben können, z. B. akzentuierte Buchstaben. Zum Beispiel wird 130 ein Zeichen ausgeben (in manchen Fällen, je nachdem, was Ihr Gerät eingerichtet ist, um mit erweiterten ASCII-Zeichen zu tun.) Format Specifiers Wenn Sie eine Varianz in die Ausgabe einführen möchten, tun Sie dies durch die Anzeige, dass externe Werden Daten benötigt: In dieser Zeichenfolge bedeutet d, dass der Wert, der an diesem Punkt in der Zeichenfolge angezeigt werden soll, aus einer Variablen entnommen werden muss. Das Zeichen zeigt an, dass wir einige Daten in den String spleißen, und das d-Zeichen zeigt an, dass wir in einer Dezimalzahl splicen. Der Teil der Zeichenfolge, die mit beginnt, wird als Format-Spezifizierer bezeichnet. Um diese Zahl tatsächlich zu bekommen, müssen wir diesen Wert auf printf angeben: was zeigt: Alle interessante Formatierungen, die Sie tun können, beinhalten das Ändern der Werte, die Sie nach dem Zeichen setzen, das das eigentliche Format ist. Das Format für das, was über ein Zeichen erscheint, ist: Die meisten dieser Felder sind optional, mit Ausnahme der Bereitstellung eines Konvertierungsspezifizierers, den Sie bereits gesehen haben (z. B. mit d, um eine Dezimalzahl auszudrucken). Das Verständnis dieser Formatierung ist am besten durch Arbeiten rückwärts, beginnend mit der Umwandlung Spezifizierer und arbeiten nach außen. So können wir am Ende beginnen Conversion Specifier Der Conversion-Spezifizierer ist der Teil des Format-Spezifizierers, der die grundlegende Formatierung des zu druckenden Wertes bestimmt. Konvertierungs-Spezifizierer für Ganzzahlen Wenn Sie eine Dezimalzahl in der Basis 0 drucken möchten, verwenden Sie d oder i. D oder i. Wenn Sie eine Ganzzahl in oktal oder hexadezimal ausgeben möchten, verwenden Sie o für oktales oder x für hexadezimal. Wenn Sie Großbuchstaben (A anstelle von beim Drucken von Dezimal 10) wollen, können Sie X verwenden. Konvertierung Spezifizierer für Gleitkommazahlen Anzeige Gleitkommazahlen hat eine Tonne von verschiedenen Optionen, am besten in einer Tabelle angezeigt: Okay, das war nicht zu schlecht war es Aber das Diagramm ist irgendwie kompliziert. Meine Empfehlung: Verwenden Sie einfach g, und es wird in der Regel tun, was Sie wollen: Wo wissenschaftliche Notation am besten geeignet ist. Anzeigen eines Prozentzeichens Da das Prozentzeichen für die Definition von Formatbezeichnern verwendet wird, gibt es einen speziellen Formatbezeichner, der bedeutet, dass das Prozentzeichen gedruckt wird: einfach ein Prozentzeichen ausdrucken. Nun können Sie durch jede der verschiedenen Komponenten eines Formatspezifizierers gehen. Längenmodifikator Der Längenmodifizierer ist vielleicht seltsam benannt, er modifiziert nicht die Länge der Ausgabe. Stattdessen ist das, was Sie verwenden, um die Länge der Eingabe. Huh Say haben Sie: Hier ist d die Eingabe zu printf und was du sagst ist, dass Sie d als ein doppeltes drucken möchten, aber d ist nicht ein doppeltes, es ist ein langes doppeltes. Ein langes Doppel ist wahrscheinlich 16 Bytes (verglichen mit 8 für ein Doppel), so dass der Unterschied zählt. Versuchen Sie, dass kleine Snippet und youll finden, dass Sie Müll-Ausgabe, die etwas wie folgt aussieht: Denken Sie daran, die Bytes, die printf gegeben werden behandelt wie ein Doppel - aber sie arent ein Doppel, theyre ein langes Doppel. Die Länge ist falsch, und die Ergebnisse sind hässlich Der Längenmodifizierer ist ganz über helfende printf Abkommen mit Fällen, in denen youre, das ungewöhnlich große (oder ungewöhnlich kleine) Variablen benutzt. Der beste Weg, um über Längenmodifikatoren denken ist zu sagen: Welche Variable Typ habe ich, und muss ich einen Längenmodifikator für es verwenden Heres eine Tabelle, die Ihnen helfen sollte: long double d 3.1415926535 printf (Lg, d) Id Wie man besondere Erwähnung über die breite Charakter Handhabung. Wenn Sie ohne das l schreiben, wird das Ergebnis sein, ein einzelnes W auf den Bildschirm zu drucken. Der Grund dafür ist, dass breite Zeichen zwei Byte sind, und für einfache ASCII-Zeichen wie W ist das zweite Byte 0. Daher denkt printf, dass die Zeichenfolge abgeschlossen ist Sie müssen printf angeben, nach Multibyte-Zeichen zu suchen, indem Sie die l: ls hinzufügen. (Wenn Sie zufällig mit wprintf arbeiten, können Sie einfach s verwenden und es wird alle Zeichenfolgen nativ als breite Zeichenketten behandeln.) Der Präzisionsmodifikator ist. number und hat etwas andere Bedeutungen für die verschiedenen Konvertierungsspezifizierer (Wie d oder g). Für Gleitkommazahlen (z. B. f) steuert er die Anzahl der nach dem Dezimalpunkt gedruckten Ziffern: Wenn die angegebene Zahl genauer als angegeben ist, wird sie umlaufen. Zum Beispiel: wird als Interessant angezeigt, für g und G, wird es die Anzahl der signifikanten Zahlen angezeigt. Dies wirkt sich nicht nur auf den Wert nach der Dezimalstelle, sondern auf die ganze Zahl aus. Bei Ganzzahlen dagegen steuert er die Mindestanzahl der gedruckten Ziffern: Druckt die Ziffer 10 mit drei Ziffern: Theres ein Sonderfall für ganze Zahlen - wenn Sie .0 angeben, dann hat die Ziffer Null keine Ausgabe : Schließlich steuert die Genauigkeit für Strings die maximale Länge des angezeigten Strings: Dies ist nützlich, wenn Sie sicherstellen müssen, dass Ihre Ausgabe nicht über eine feste Anzahl von Zeichen hinausgeht. Das Breitenfeld ist fast das Gegenteil des Präzisionsfeldes. Precision steuert die maximale Anzahl der zu druckenden Zeichen, die Breite steuert die Mindestanzahl und hat das gleiche Format wie Präzision, außer ohne Dezimaltrennzeichen: Die Leerzeichen gehen standardmäßig am Anfang. Sie können die Präzision und Breite kombinieren, wenn Sie möchten: ltwidthgt. ltprecisiongt (Beachten Sie den führenden Raum.) Die Flag-Einstellung steuert Zeichen, die zu einer Zeichenfolge hinzugefügt werden, z. B. ob eine 0x an eine Hexadezimalzahl angehängt werden soll oder ob die Nummern mit platziert werden sollen 0s. Die spezifischen Flag-Optionen sind die Pound-Zeichen: Hinzufügen ein wird eine 0 an eine Oktanzahl (bei der Verwendung der o Umwandlung Spezifizierer) oder eine 0x vorangestellt werden, um eine hexadezimale Zahl vorangestellt (bei der Verwendung eines x Umwandlung Spezifizierer). Für die meisten anderen Konvertierungsspezifizierer wird durch Addition von a einfach die Einbeziehung eines Dezimalpunkts erzwungen, auch wenn die Zahl keinen Bruchteil aufweist. Gedruckt werden. Dabei ergibt sich einfach die Nullmarke: 0 Mit 0 wird die Anzahl mit 0s gefüllt. Dies ist nur wichtig, wenn Sie die Breite Einstellung zu bitten, für eine minimale Breite für Ihre Nummer. Zum Beispiel, wenn Sie schreiben: Das Plus-Zeichen-Flag: Das Plus-Zeichen enthält die Vorzeichen-Spezifizierer für die Zahl: Das Minus-Zeichen-Flag: - Schließlich wird das Minuszeichen wird die Ausgabe linksbündig. Dies ist wichtig, wenn Sie den Breite-Spezifizierer verwenden und dass die Auffüllung am Ende der Ausgabe statt des Beginns erscheinen soll: Mit der Auffüllung am Ende der Ausgabe. Kombinieren Sie alle zusammen Für jeden gegebenen Format-Spezifizierer können Sie immer das Prozentzeichen und den Basis-Spezifizierer angeben. Sie können dann alle oder alle der Flags, Breite und Präzision und Länge, die Sie wollen. Sie können sogar mehrere Flaggen zusammenführen. Hierbei handelt es sich um ein besonders komplexes Beispiel, das mehrere Flags darstellt, die zum Drucken von Speicheradressen als hexadezimale Werte nützlich sind. Der einfachste Weg, dies zu lesen, ist zuerst das Zeichen zu bemerken und dann von rechts nach links zu lesen - das x zeigt an, dass wir einen hexadezimalen Wert drucken die 10 zeigt an, dass wir 10 Gesamtzeichen Breite wollen die nächste 0 ist ein Flag, das anzeigt, dass wir wollen Zu pad mit 0s intead von Leerzeichen, und schließlich zeigt das Zeichen, dass wir eine führende 0x. Da wir mit 0x beginnen, bedeutet dies gut, dass wir 8 Stellen haben - genau die richtige Menge für den Ausdruck einer 32-Bit-Speicheradresse. Das Ergebnis ist: Lesen Sie mehr ähnliche Artikel
No comments:
Post a Comment