Ir ao conteúdo
  • Cadastre-se

Criar uma tabela - linguagem c


Posts recomendados

Boa Tarde, tenho um exercico da faculdade para fazer. A parte lógica esta tudo certo só estou com problema em mostrar o resultado pois o professor quer q mostre o resultado como uma tabela, conforme modelo abaixo.

 

Aluno                 Nota 1    Nota 2    Nota 3    Média

Lucas                   10           9,5         7,4         8,9

Leandro                9            9,5         7,8         8,7

José                     8.5          9,2         7,9         8,8

 

Quero saber como eu vou colocar para aparecer tudo alinhado, pois como eu fiz aqui esta ficando tudo desalinhado.

 

Link para o comentário
Compartilhar em outros sites

@Rharison Lucas Você pode ir colocando tudo dentro de uma string com o sprintf(), Depois é só imprimir a string.

 

O ponto chave é controlar para que os campos comecem no mesmo índice da string, exemplo,

o campo nome começa no 0 e vai até o 20

o campo nota 1 começa na posição 22, e vai ate o 30

...

o mesmo com os outros campos.

 

e pra não dar erro, você pode preencher todos os caracteres da string com o espaço, mas isso antes de escrever as informações.

 


É apenas uma maneira de fazer isso, também tem outras. Deu pra entender?

Link para o comentário
Compartilhar em outros sites

#include <stdio.h>
#include <stdlib.h>
#define MAXLETRAS 10
typedef struct {
    char nome[MAXLETRAS];
    float nota[4];
}Dados;

int main (){
    int i,j;
    Dados lista[3] ={
        {{"Lucas"  }, {10  , 9.5, 7.4, 8.9} },
        {{"Leandro"}, { 9  , 9.5, 7.8, 8.7} },
        {{"José"   }, { 8.5, 9.2, 7.9, 8.8} }    
    };
    printf("%*s%8s%8s%8s%8s\n", -MAXLETRAS, "Aluno", "Nota1", "Nota2", "Nota3", "Média");
    // printf("%*s\n", MAXLETRAS,"Hola mundo");
    for (i=0;i<3;i++) {
        printf("%*s", -MAXLETRAS, lista[i].nome); 
        for (j=0;j<4;j++) { 
            printf("%8.1f", lista[i].nota[j]);
        }
        printf("\n");
   }
    
    getchar();
    return 0;
}

si a qualquer especificador de formato você colocar umvalor entre % e s por exemplo, você estará "garantindo" que al menos esse espaço será respeitado pela seguinte variável, não será pisado, Exemplo:

printf("[%10s]%d", "Ola", 10);

imprime maximo 10 letras, e a palavra olá sairá ao final:

[       Ola]10

Mas si eu colocar o sinal de menos adiante do 10 tal como:

printf("[%-10s]", "Ola", 10);

A saida será:

[Ola       ]10

E se por acaso tiver mais letras do que cabe em essas deis letras todas serão mostradas:

printf("[%10s]%d", "inconstitucionalissimamente", 10);

[inconstitucionalissimamente]10

 

O bom disso é que se você sabe que todos os nomes tem menos do que 10 letras, então é como se você reservasse 10 letras da janela para escrever o nome, se o nome for mais pequeno que as 10 letras isso não importa, pois se imprimirão espaços.


Outro truque consiste em fazer algo como:
 

#include <stdio.h>
#define SEPARADOR -10

int main (){
    printf("[%*s][%*s][%*s][%*s]\n", 
        SEPARADOR, "campo1", 
        SEPARADOR, "campo2", 
        SEPARADOR, "campo3", 
        SEPARADOR, "campo4"
    );

    getchar();
    return 0;
}

Nesse caso cada campo terá a separação do #define -10, prove #define 10 para ver o que acontece.

Isso tudo funciona com os tipos %d(inteiros), %10.2f(flotantes).... quase todos.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Rharison Lucas eu editei, é a sprintf: http://www.cplusplus.com/reference/cstdio/sprintf/

 

/* sprintf example */
#include <stdio.h>

int main ()
{
  char buffer [50];
  int n, a=5, b=3;
  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
  printf ("[%s] is a string %d chars long\n",buffer,n);
  return 0;
}


Já utilizei muito ela, é uma função extremamente útil.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 5 anos depois...
Em 08/05/2016 às 17:55, vangodp disse:
#include <stdio.h>
#include <stdlib.h>
#define MAXLETRAS 10
typedef struct {
    char nome[MAXLETRAS];
    float nota[4];
}Dados;

int main (){
    int i,j;
    Dados lista[3] ={
        {{"Lucas"  }, {10  , 9.5, 7.4, 8.9} },
        {{"Leandro"}, { 9  , 9.5, 7.8, 8.7} },
        {{"José"   }, { 8.5, 9.2, 7.9, 8.8} }    
    };
    printf("%*s%8s%8s%8s%8s\n", -MAXLETRAS, "Aluno", "Nota1", "Nota2", "Nota3", "Média");
    // printf("%*s\n", MAXLETRAS,"Hola mundo");
    for (i=0;i<3;i++) {
        printf("%*s", -MAXLETRAS, lista[i].nome); 
        for (j=0;j<4;j++) { 
            printf("%8.1f", lista[i].nota[j]);
        }
        printf("\n");
   }
    
    getchar();
    return 0;
}

si a qualquer especificador de formato você colocar umvalor entre % e s por exemplo, você estará "garantindo" que al menos esse espaço será respeitado pela seguinte variável, não será pisado, Exemplo:

printf("[%10s]%d", "Ola", 10);

imprime maximo 10 letras, e a palavra olá sairá ao final:

[       Ola]10

Mas si eu colocar o sinal de menos adiante do 10 tal como:

printf("[%-10s]", "Ola", 10);

A saida será:

[Ola       ]10

E se por acaso tiver mais letras do que cabe em essas deis letras todas serão mostradas:

printf("[%10s]%d", "inconstitucionalissimamente", 10);

[inconstitucionalissimamente]10

 

O bom disso é que se você sabe que todos os nomes tem menos do que 10 letras, então é como se você reservasse 10 letras da janela para escrever o nome, se o nome for mais pequeno que as 10 letras isso não importa, pois se imprimirão espaços.


Outro truque consiste em fazer algo como:
 

#include <stdio.h>
#define SEPARADOR -10

int main (){
    printf("[%*s][%*s][%*s][%*s]\n", 
        SEPARADOR, "campo1", 
        SEPARADOR, "campo2", 
        SEPARADOR, "campo3", 
        SEPARADOR, "campo4"
    );

    getchar();
    return 0;
}

Nesse caso cada campo terá a separação do #define -10, prove #define 10 para ver o que acontece.

Isso tudo funciona com os tipos %d(inteiros), %10.2f(flotantes).... quase todos.

 

 

@vangodp Olá, será que você poderia me ajudar com um trabalho que tenho pra fazer da faculdade, to perdida nele.  

 

Atividade Prática Supervisionada_2021.2_Algoritmos (1).pdf

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...