Bom dia a todos, tenho um trabalho da faculdade para fazer (Github do projeto), no qual tenho que criar uma fila de vacinação, o código (em grande parte) está pronto, porém tenho uma dúvida:
É possível criar uma tabela “dinâmica” em C? Porque caso testem o código com o seu nome, a não ser que seu nome tenha 5 letras, verá que a tabela ficará desconfigurada, gostaria de saber se tem como formatar para ficar melhor apresentável
Agradeço a resposta, o que eu queria não seria possível fazer em C, até porque queria que movesse tanto o ‘+’ quanto o ‘|’ sem contar os espaços, vou pesquisar mais sobre printf, mas sua resposta já foi de grande ajuda.
Sim, e é relativamente simples, o primeiro passo é dividir seu problema:
Basicamente isso acontece porque você usa uma quantidade fixa de espaços, se a tabela é dinâmica, a quantidade de espaços vazios deve ser dinâmica, então, no seu gerador temos isso:
A função geradora precisa de uma variável global, que representará os espaços, pode ser tipo:
char espacos[50] = "";
E o gerador seria algo assim, eu fiz um sketch:
char*geradorEspacos(char*nome){
// Reinicia nosso gerador, é o equivalente em C de:
// espacos = "";
espacos[0] = '\0';
// 29 é a quantidade de espaços de uma margem da célula até a outra
// Pra medir eu usei a seguinte tática:
//
// 1. Coloquei uma célula vazia contendo apenas os caracteres da
// borda (||)
//
// 2. Preenchi a célula de espaços e contei quantos espaços deu:
// | | = 35 espaços
//
// 3. Do valor obtido, descontei 3 espaços para a margem esquerda
// e 3 para a margem direita, resultando em 29
for(int i = 0; i < 29-strlen(nome); i++) {
strcat(espacos, " ");
}
return espacos;
}
Como é um trabalho de faculdade seria desonesto se eu abrisse um PR, mas eu obtive o resultado desejado:
+-----------------------------------+
| Nomes |
+-----------------------------------+
| Natanael |
| Pedro |
+-----------------------------------+
Basta colocar o “-” e o valor desejado, por exemplo, eu criei um char com tamanho 30, logo limitei no método que ele irá ocupar de qualquer maneira 30 caracteres, assim não foi perdido o formato da tabela.
Acho que o ideal é vc colocar o padding na formatação do printf. Se vc sabe que o campo tem 10 espaços disponíveis, coloque o quantificador respectivo em cada campo. Se há chance do conteúdo passar desse espaço, corte ele antes da impressão.
Prefira sempre usar os recursos da própria linguagem de programação do que criar uma função para isso. Geralmente o código é muito mais otimizado.
Prefira também ler a documentação da linguagem de programação, pois lá há toda explicação das possibilidades da função. Por exemplo aqui explica que se vc quiser o texto alinhado à esquerda, deve colocar um - na especificação do formato.
Do jeito que foi solucionado, quando chegar na fase “10” vai desalinhar de novo…