Como seqüências de formato usando printf () para obter o mesmo comprimento na saída?

StackOverflow https://stackoverflow.com/questions/1809399

  •  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.
Foi útil?

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.

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