Pergunta

Como faço para formatar a minha saída em C ++ córregos para imprimir largura fixa tabelas alinhado à esquerda? Algo como

printf("%-14.3f%-14.3f\n", 12345.12345, 12345.12345);

poducing

12345.123     12345.123
Foi útil?

Solução

Incluir o cabeçalho padrão <iomanip> e enlouquecer. Especificamente, o manipulador setw define a largura da saída. setfill define o caractere de enchimento.

Outras dicas

std::cout << std::setiosflags(std::ios::fixed)
          << std::setprecision(3)
          << std::setw(18)
          << std::left
          << 12345.123;

Você também pode considerar a funcionalidade mais amigável fornecido por um destes:

  • Boost.Format (poderoso, mas muito pesados, mais tempo e memória alocações do que outros mencionados)
  • Loki.SafeFormat
  • FastFormat (relativamente novo, mas escaldante biblioteca rápida, também de tipo seguro, ao contrário dos outros)

Escrevendo de memória, mas deve ser algo ao longo destas linhas:

// Dumb streams:
printf("%-14.3f%-14.3f\n", 12345.12345, 12345.12345);

// For IOStreams you've got example in the other answers

// Boost Format supports various flavours of formatting, for example:
std::cout << boost::format("%-14.3f%-14.3f\n") % a % b;
std::cout << boost::format("%1$-14.3f%2$-14.3f\n") % a % b;
// To gain somewhat on the performance you can store the formatters:
const boost::format foo("%1$-14.3f%2$-14.3f\n");
std::cout << boost::format(foo) % a % b;

// For the Loki::Printf it's also similar:
Loki::Printf("%-14.3f%-14.3f\n")(a)(b);

// And finally FastFormat.Format (don't know the syntax for decimal places)
fastformat::fmtln(std::cout, "{0,14,,<}{1,14,,>}", a, b);

Além disso, se você pretende ficar com qualquer uma dessas bibliotecas de formatação, examinar cuidadosamente as suas limitações no contexto da expressividade, portabilidade (e outros dependência biblioteca), eficiência, suporte de internacionalização, tipo-segurança, etc.

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