Frage

Ich arbeite daran, einige alte code von 1998 bis zum 21.Jahrhundert.Einer der ersten Schritte im Prozess ist die Umwandlung der printf-Anweisungen QString Variablen.Egal, wie oft ich schaue zurück auf printf obwohl, ich immer am Ende vergessen, das eine oder das andere.So, zum Spaß, lassen Sie uns entschlüsseln, zusammen, für ole' times sake, und in dem Prozess erstellen, der die erste kleine 'printf primer' für Stackoverflow.

In dem code, stieß ich auf dieses kleine Juwel,

printf("%4u\t%016.1f\t%04X\t%02X\t%1c\t%1c\t%4s", a, b, c, d, e, f, g);

Wie werden die Variablen a, b, c, d, e, f, g formatiert werden?

War es hilfreich?

Lösung

Danny ist meistens gleich.

ein.unsigned decimal (minimum 4 Zeichen, Leerzeichen aufgefüllt
b.floating point, mindestens 16 Ziffern vor dem Dezimalkomma (0 gepolstert), 1 Stelle nach dem Komma
c.hex, mindestens 4 Zeichen, 0 gepolstert, Briefe sind gedruckt in Großbuchstaben
d....wie oben, jedoch mindestens 2 Zeichen
e.e wird davon ausgegangen, dass ein int umgewandelt in einen unsigned char und ausgedruckt werden
f.gleiche wie e
g.Dies ist wahrscheinlich ein Tippfehler, der 4 hat keine Wirkung.Wenn es "%.4s", dann maximal 4 Zeichen aus der Zeichenfolge gedruckt werden.Es ist interessant zu beachten, dass in diesem Fall der string braucht nicht zu null beendet.

Edit: jj33 Punkte aus 2 Fehler in b und g oben hier.

Andere Tipps

@Jason Day, Ich denke, dass die 4 in den letzten %4s ist von Bedeutung, wenn es weniger als 4 Zeichen.Wenn es mehr als 4 sind Sie richtig, %4s und %s wäre der gleiche, aber mit weniger als 4 chars in g %s würde werden Links und gerechtfertigt %4s wäre Rechtsbündig in einem 4-char-Feld.

b ist eigentlich mindestens 16 Zeichen für den gesamten Bereich, einschließlich die dezimal-und die Ziffer nach dem Komma denke ich (insgesamt 16 chars vs insgesamt 18 chars)

Hier ist meine printf-primer:http://www.pixelbeat.org/programming/gcc/format_specs.html

Ich habe immer kompilieren Sie mit -Wall mit gcc, die wird Sie warnen, über alle Abweichungen zwischen dem gelieferten printf-Formate und Variablen.

@jj33, du hast absolut Recht, in beiden Punkten.

#include <stdio.h>

int main(int argc, char *argv[]) {
    char *s = "Hello, World";
    char *s2 = "he";

    printf("4s: '%4s'\n", s);
    printf(".4s: '%.4s'\n", s);
    printf("4s2: '%4s'\n", s2);
    printf(".4s2: '%.4s'\n", s2);

    return 0;
}

$ gcc -o foo foo.c
$ ./foo
4s: 'Hello, World'
.4s: 'Hell'
4s2: '  he'
.4s2: 'he'

Guter Fang!

ein.dezimal, vier signifikante stellen

b.Nicht sicher

c.hex, mindestens 4 Zeichen lang sein.

d....Auch hex, mindestens 2 Zeichen

e.1 Charakter

f.String von Zeichen, mindestens 4

Was Sie wirklich brauchen, ist ein Werkzeug, das die format-strings in printf () - Anweisungen und wandelt Sie in entsprechende QString-basierte Funktion aufruft.
Wer möchte, verbringt seine Freie-Software-Spende Mal auf die Entwicklung von so einem tool?

Platzhalter für die URL zu einer Freie-Software-hosting-Dienst mit der source-code von so einem tool

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