Pergunta

Estou trabalhando para trazer alguns códigos antigos de 1998 para o século XXI.Uma das primeiras etapas do processo é converter as instruções printf para QString variáveis.Não importa quantas vezes eu olhe para printf, sempre acabo esquecendo uma coisa ou outra.Então, por diversão, vamos decodificá-lo juntos, pelo bem dos velhos tempos, e no processo criar o primeiro pequeno 'printf primer' para Stackoverflow.

No código, me deparei com esta pequena joia,

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

Como serão formatadas as variáveis ​​a, b, c, d, e, f, g?

Foi útil?

Solução

Danny está quase certo.

a.decimal sem sinal, mínimo de 4 caracteres, preenchido com espaço
b.ponto flutuante, mínimo de 16 dígitos antes do decimal (0 preenchido), 1 dígito após o decimal
c.hexadecimal, mínimo de 4 caracteres, 0 preenchido, letras impressas em maiúsculas
d.igual ao acima, mas no mínimo 2 caracteres
e.e é assumido como um int, convertido em um caractere não assinado e impresso
f.o mesmo que e
g.Provavelmente é um erro de digitação, o 4 não tem efeito.Se fosse "%.4s", seriam impressos no máximo 4 caracteres da string.É interessante notar que, neste caso, a string não precisa ser terminada em nulo.

Editar: jj33 aponta 2 erros em b e g acima aqui.

Outras dicas

@Dia de Jasão, acho que o 4 nos últimos %4s é significativo se houver menos de 4 caracteres.Se houver mais de 4, você está certo, %4s e %s seriam iguais, mas com menos de 4 caracteres em g %s seria justificado à esquerda e %4s seria justificado à direita em um campo de 4 caracteres.

b tem no mínimo 16 caracteres para todo o campo, incluindo o decimal e o único dígito após o decimal, eu acho (16 caracteres no total vs 18 caracteres no total)

Aqui está minha cartilha printf:http://www.pixelbeat.org/programming/gcc/format_specs.html

Sempre compilar com -wall com o GCC, que avisará sobre quaisquer incompatibilidades entre os formatos e variáveis ​​PrintF fornecidos.

@ jj33, você está absolutamente certo em ambos os aspectos.

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

Boa pegada!

a.decimal, quatro algarismos significativos

b.Não tenho certeza

c.hexadecimal, mínimo de 4 caracteres

d.Também hexadecimal, mínimo de 2 caracteres

e.1 personagem

f.Sequência de caracteres, mínimo 4

O que você realmente precisa é de uma ferramenta que pegue as strings de formato nas instruções printf() e as converta em chamadas de função equivalentes baseadas em QString.
Alguém quer gastar seu tempo de doação de software livre no desenvolvimento de tal ferramenta?

Espaço reservado para URL para um serviço de hospedagem de Software Livre contendo o código fonte de tal ferramenta

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top