Question

Je suis en train de travailler sur la mise quelques vieux code à partir de 1998 jusqu'au 21ème siècle.L'une des premières étapes dans le processus de conversion de l'printf déclarations QString les variables.Peu importe combien de fois je regarde en arrière printf bien, je finis toujours par oublier une chose ou l'autre.Donc, pour le plaisir, nous allons décoder ensemble, pour ole' temps l'amour et dans le processus de créer la première petite 'printf apprêt" pour Stackoverflow.

Dans le code, je suis tombé sur ce petit bijou

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

Comment les variables a, b, c, d, e, f, g formaté?

Était-ce utile?

La solution

Danny est surtout à droite.

un.décimal non signé, un minimum de 4 caractères, espace rembourré
b.virgule flottante, le minimum de 16 chiffres avant la virgule (0 rembourré), 1 chiffre après la virgule
c.hex, un minimum de 4 caractères, 0 rembourré, les lettres sont en majuscules
d.même que ci-dessus, mais un minimum de 2 caractères
e.e est supposé être un int, converti en unsigned char et imprimé
f.de même que l'e
g.C'est probablement une faute de frappe, le 4 n'a pas d'effet.Si c'était "%.4s", ensuite un maximum de 4 caractères à partir de la chaîne serait imprimé.Il est intéressant de noter que, dans ce cas, la chaîne ne doit pas être null.

Edit: jj33 points 2 erreurs dans b et g ci-dessus ici.

Autres conseils

@Jason Day, Je pense que les 4 dans la dernière %4s est important si il y a moins de 4 caractères.Si il y a plus de 4, vous avez raison, %4s et %s serait le même, mais avec moins de 4 caractères en g %s serait justifié à gauche et %4s serait justifié à droite dans un 4 champ char.

b est en fait au moins 16 caractères pour l'ensemble du domaine, y compris le séparateur et le seul chiffre après la virgule, je crois (un total de 16 caractères vs 18 caractères)

Voici mon printf apprêt:http://www.pixelbeat.org/programming/gcc/format_specs.html

J'ai toujours compiler avec -Wall de gcc qui avertir à propos des différences entre les fourni printf formats et des variables.

@jj33, vous avez tout à fait raison, sur deux chefs d'accusation.

#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'

Bonne prise!

un.les décimales, les quatre chiffres significatifs

b.Pas sûr

c.hex, un minimum de 4 caractères

d.Aussi hex, un minimum de 2 caractères

e.1 caractère

f.Chaîne de caractères, minimum de 4

Ce que vous avez vraiment besoin est un outil qui prend les chaînes de format de printf() les déclarations et les convertit en équivalent QString en fonction des appels de fonction.
Quelqu'un veut passer son Logiciel Libre Don de Temps sur le développement d'un tel outil?

Espace réservé pour les URL pour un Logiciel Gratuit service d'hébergement en tenant le code source d'un tel outil

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top