Frage

Ich habe gesucht ein wenig, aber ich habe nicht bekommen, eine besonders klare Antwort.In C (und ich denke, C++), wie bestimmen Sie, was kommt nach der %, wenn Sie mit printf?.Zum Beispiel:

double radius = 1.0;
double area = 0.0;
area = calculateArea( radius );
printf( "%10.1f     %10.2\n", radius, area );

Ich habe dieses Beispiel direkt aus einem Buch, dass ich auf der C-Sprache.Dies ist jedoch nicht sinnvoll für mich.Wo tun Sie kommen mit 10.1f und 10.2f?Könnte jemand bitte erklären?

War es hilfreich?

Lösung

http://en.wikipedia.org/wiki/Printf#printf_format_placeholders ist Wikipedia-Referenz-format für Platzhalter in printf. http://www.cplusplus.com/reference/clibrary/cstdio/printf.html hilfreich ist auch

Im Grunde eine einfache form, es ist %[Breite].[Präzision][Typ].Die Breite können Sie sicherstellen, dass die variable, die gedruckt wird, ist zumindest eine gewisse Länge haben (nützlich für Tabellen etc.).Präzision ermöglicht Ihnen die Angabe der Präzision eine Zahl gedruckt wird (zB.Nachkommastellen etc.) und informiert die C/C++, was die variable, die Sie gegeben haben, ist es (Zeichen, integer, double etc.).

Hoffe, das hilft

UPDATE:

Um zu klären, mit Ihrem Beispiele:

printf( "%10.1f     %10.2\n", radius, area );

%10.1 f (in Bezug auf das erste argument:radius) bedeutet, machen Sie 10 Zeichen lang sein (dh.mit Leerzeichen Auffüllen), und drucken Sie es als float mit einer Nachkommastelle.

%10.2 (in Bezug auf das zweite argument:Bereich) bedeutet, machen Sie 10 Zeichen lang ist (wie oben), und drucken Sie mit zwei Nachkommastellen.

Andere Tipps

man 3 printf

auf einem Linux-system gibt Ihnen alle Informationen, die Sie benötigen.Sie können auch finden, diese Seiten online-Handbuch, zum Beispiel bei http://linux.die.net/man/3/printf

10.1 f heißt Gleitkommazahl mit 1 Nachkommastelle und die 10 Orte, die vor dem Komma.Wenn die Anzahl ist weniger als 10 Ziffern, es wird mit Leerzeichen aufgefüllt.10.2 f ist die gleiche, aber mit 2 stellen nach dem Komma.

Auf jedem system, das ich gesehen habe, von Unix auf Rails-Migrationen, dies ist nicht der Fall.@robintw drückt es am besten aus:

Im Grunde eine einfache form, es ist %[Breite].[Präzision][Typ].

Das ist nicht "10 Plätze bevor der dezimal-Punkt," aber", 10 Plätze, sowohl vor und nach, und einschließlich der der dezimal-Punkt."

10.1 f heißt Gleitkommazahl mit 10 Zeichen breit, mit 1 Stelle hinter dem Komma.Wenn die Anzahl ist weniger als 10 Ziffern, es wird mit Leerzeichen aufgefüllt.10.2 f ist die gleiche, aber mit 2 stellen nach dem Komma.

Sie haben folgende Typen:

%d   - integer
%x   - hex integer
%s   - string
%c   - char (only one)
%f   - floating point (float)
%d   - signed int (decimal)
%i   - signed int (integer) (same as decimal).
%u   - unsigned int
%ld  - long (signed) int
%lu  - long unsigned int
%lld - long long (signed) int
%llu - long long unsigned int

Edit:es gibt mehrere andere aufgeführt in @Eli ' s Antwort (man 3 printf).

In kurzen, diese Werte nach der % sagen printf wie zu interpretieren (oder Ausgabe) - alle Variablen, die kommen später.In deinem Beispiel radius interpretiert wird als float (das 'f'), und die 10.1 gibt Auskunft darüber, wie viele Dezimalstellen zu verwenden, wenn drucken Sie es aus.

Finden diesen link für mehr details über all die Modifikatoren, die Sie verwenden können mit printf.

10.1 f bedeutet, dass Sie anzeigen möchten float mit 1 dezimal-und die Zahl angezeigt werden soll 10 Zeichen lang sein.

Die Man-Seiten enthalten Informationen, die Sie wollen.Um zu Lesen, was Sie haben vor:

printf( "%10.2f", 1.5 )

Dies druckt:

         1.50

In Erwägung nachstehender Gründe:

printf("%.2f", 1.5 )

Prints:

1.50

Hinweis: die Begründung der beiden.Ähnlich:

printf("%10.1f", 1.5 )

Drucken würde:

        1.5

Jede Zahl nach dem .ist die Präzision, die Sie möchten gedruckt.Beliebige Anzahl, bevor die .ist der Abstand vom linken Rand.

Ein Thema, das noch nicht aufgeworfen wurde, ist, ob Doppel ist das gleiche wie ein float.Auf einigen Systemen ein anderes format specifier war nötig, um eine doppelte im Vergleich zu einem float.Nicht zuletzt, weil die Parameter übergeben werden konnten in verschiedenen Größen.

 %f - float
 %lf - double
 %g - double

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top