Como seqüências de formato usando printf () para obter o mesmo comprimento na saída?
-
05-07-2019 - |
Pergunta
Eu tenho duas funções, uma que produz mensagens como Starting initialization...
e outro que verifica retornam códigos e "Ok"
saídas, "Warning"
ou "Error"
. No entanto, a saída que é produzido é o de comprimento diferente:
Starting initialization...Ok.
Checking init scripts...Ok.
Como posso obter algo como isto:
Starting initialization... Ok.
Checking init scripts... Ok.
Solução
Você pode especificar a largura em campos de cordas, por exemplo,
printf("%-20s", "initialization...");
e, em seguida, tudo o que está impresso com esse campo ficará em branco acolchoado com a largura que você indicar.
O -
esquerda Justifica o texto nesse campo.
Outras dicas
printf
permite formatação com especificadores de largura. por exemplo.
printf( "%-30s %s\n", "Starting initialization...", "Ok." );
Você usaria um especificador de largura negativo para indicar deixou-justificação porque o padrão é usar o botão direito do justificação.
Além disso, se você quer a flexibilidade de escolher o width
, você pode escolher entre um dos dois formatos a seguir (com ou sem truncagem):
int width = 30;
//no truncation uses %-*s
printf( "%-*s %s\n", width, "Starting initialization...", "Ok." );
// output is "Starting initialization... Ok."
//truncated to the specified width uses %-.*s
printf( "%-.*s %s\n", width, "Starting initialization...", "Ok." );
// output is "Starting initialization... Ok."
Há também o modificador %n
que pode ajudar em determinadas circunstâncias. Ele retorna a coluna em que a corda estava tão longe. Exemplo:. Você quer escrever várias linhas que estão dentro da largura da primeira linha como uma tabela
int width1, width2;
int values[6][2];
printf("|%s%n|%s%n|\n", header1, &width1, header2, &width2);
for(i=0; i<6; i++)
printf("|%*d|%*d|\n", width1, values[i][0], width2, values[i][1]);
imprimirá 2 colunas com a mesma largura de qualquer comprimento das duas cordas header1
e header2
pode ter.
Eu não sei se todas as implementações têm a %n
mas Solaris e Linux fazer.
Há também a solução e low-tech de contagem de espaços adicionando à mão para fazer suas mensagens se alinham. Nada o impede de incluindo alguns espaços à direita em suas cadeias de mensagens.
Comece com o uso de abas, o \ t modificador personagem. Ele irá avançar para um local fixo (colunas, linguagem terminal). No entanto, ele não ajuda se há diferenças de mais do que a largura da coluna (4 caracteres, se bem me lembro).
Para corrigir isso, escrever o seu material "OK / NOK" usando número fixo de Tabs (5? 6 ?, experimentá-lo), e depois voltar ( \ r ) sem nova-revestimento, e escrever sua mensagem.