Modulo 1 EX004 preciso de uma ajuda.

Home Fóruns Linguagem C Modulo 1 EX004 preciso de uma ajuda.

Visualizando 7 respostas da discussão
  • Autor
    Posts
    • #67224

      bom a ajuda é sobre o espaçamento da listagem, eu consigo fazer, só que tem um pequeno problema se o nome for muito grande ele quebra o espaçamento mesmo eu limitando o char [20] ele deixa escrever mais que isso e manda a informação pro printf. acho que não sei explicar direito então vou colar o codigo aqui se alguem puder me explicar como travar o char ou a informação do printf sair só aqueles 20 caracteres ia ficar melhor.

      #include <stdio.h>
      #include <stdlib.h>
      #include <locale.h>
      
      void main(){
          setlocale(LC_ALL, "Portuguese");
          char nome1[20],nome2[20],nome3[20];
          char c1,c2,c3;
          float nota1,nota2,nota3;
      
          printf("<<< EX004 - LISTAGEM >>>\n\n");
          //primeira pessoa nome1 c1 nota1
      
          printf("Cadastrando a Primeira pessoa:\n");
          printf("------------------------------");
          fflush(stdin);
          printf("\nNome: ");
          gets(nome1);
          fflush(stdin);
          printf("SEXO [M/F]: ");
          scanf("%c", &c1);
          fflush(stdin);
          printf("NOTA: ");
          scanf("%f", &nota1);
          //segunda pessoa nome2 c2 nota2
      
          fflush(stdin);
          printf("\n\nCadastrando a Segunda pessoa:\n");
          printf("------------------------------");
          fflush(stdin);
          printf("\nNome: ");
          gets(nome2);
          fflush(stdin);
          printf("SEXO [M/F]: ");
          scanf("%c", &c2);
          fflush(stdin);
          printf("NOTA: ");
          scanf("%f", &nota2);
          //terceira pessoa nome3 c3 nota3
      
          fflush(stdin);
          printf("\n\nCadastrando a Terceira pessoa:\n");
          printf("------------------------------");
          fflush(stdin);
          printf("\nNome: ");
          gets(nome3);
          fflush(stdin);
          printf("SEXO [M/F]: ");
          scanf("%c", &c3);
          fflush(stdin);
          printf("NOTA: ");
          scanf("%f", &nota3);
          //tabela final
      
          printf("\n\nListagem Completa");
          printf("\n-------------------------------------");
          /*
          // as duas maneiras só consigo alinhar se o nome for menor que 20 caracteres se passar de 25 a 30 ele desalinha
          printf("\nNOME\t\t\tSEXO\tNOTA");
          printf("\n%-20s\t %-1c\t%.1f",nome1,c1,nota1);
          printf("\n%-20s\t %-1c\t%.1f",nome2,c2,nota2);
          printf("\n%-20s\t %-1c\t%.1f",nome3,c3,nota3);
          */
          printf("\nNOME\t\t\tSEXO\tNOTA\n%-20s\t %-1c\t%.1f\n%-20s\t %-2c\t%.1f\n%-20s\t %-1c\t%.1f", nome1,c1,nota1,nome2,c2,nota2,nome3,c3,nota3);
          printf("\n-------------------------------------");
          
          /*OBS NÃO CONSIGO ALINHAR O NOME SE ELE FOR MUITO GRANDE EXEMPLO CAIO PIRES BISPO RODRIGUES ele passa a configuração
          teria como alinhar se afastar mais o SEXO E NOTA mais ficaria muito grande ai daria pra colocar -30s e ter um espaçamento 30 do SEXO
          ou travar o nome para ter no maximo aquele numero de caracteres, eu coloquei 20 mais mesmo assim consigo digitar mais que 20
          */
    • #67315
      Tutora Mayla
      Mestre

      Caio, uma das soluções para este problema envolve utilizar o caractere especial \0. No C as strings têm o seu final demarcado por este caractere, então podemos utilizá-lo para limitar uma string a um tamanho qualquer.
      Por exemplo, se após a leitura de nome1 é desejado garantir que ela tenha tamanho no máximo 20, pode-se fazer nome1[20] = '\0';. Isto irá inserir o marcador de fim de string na posição 20 e depois, ao escrever no terminal, serão escritos apenas os 20 primeiros caracteres da string.

      Espero ter ajudado, caso a dúvida persista volte a entrar em contato.

    • #115557

      printf(“NOME\t\tSEXO\tNOTA\n”);
      printf(“%s\t%2c\t%.1f\n”, nome1, sexo1, nota1);
      fflush(stdin);
      printf(“%s\t%2c\t%.1f\n”, nome2, sexo2, nota2);
      fflush(stdin);
      printf(“%s\t%2c\t%.1f\n”, nome3, sexo3, nota3);

    • #115587
      Tutora Jessica
      Moderador

      Ola Vanderlei, alguma duvida?

    • #115594
      MARCIO PAIVA
      Participante

      Bom dia, tudo bem Jéssica?
      Estou também estudando a linguagem c
      já fiz quatro exercícios. Gostaria que desse uma analisada
      para ver se estou andando no modo certo. desde já agradeço

      eis aqui o código da linguagem c para analise esse é o exercício de número quatro:

      #import <stdio.h>
      #include <locale.h>
      void main() {
          char * nome1[30];
          char * nome2[30];
          char * nome3[30];
          char sexo1;
          char sexo2;
          char sexo3;
          float nota1,nota2,nota3;
          setlocale(LC_ALL,"portuguese");
          printf("<<< EX004 - Listagem >>>\n");
          printf("\nCadastrando a primeira pessoa:\n");
          printf("--------------------------------\n");
          printf("NOME: ");
          fflush(stdin);
          gets(nome1);
          printf("SEXO [M/F]: ");
          fflush(stdin);
          sexo1 = getchar();
          printf("NOTA: ");
          scanf("%f", &nota1);
          printf("\nCadastrando a segunda pessoa:\n");
          printf("------------------------------\n");
          printf("NOME: ");
          fflush(stdin);
          gets(nome2);
          printf("SEXO [M/F]: ");
          fflush(stdin);
          sexo2 = getchar();
          printf("NOTA: ");
          scanf("%f", &nota2);
          printf("\nCadastrando a terceira pessoa:\n");
          printf("-------------------------------\n");
          printf("NOME: ");
      
    • #115595
      MARCIO PAIVA
      Participante

      Peço desculpa acabei enviando o código pela metade e ainda por cima errado.

      vou enviar de novo eis aqui o código do exercício como já mencionei anteriormente:

      #import <stdio.h>
      #include <locale.h>
      void main() {
          char * nome1[30];
          char * nome2[30];
          char * nome3[30];
          char sexo1;
          char sexo2;
          char sexo3;
          float nota1,nota2,nota3;
          setlocale(LC_ALL,"portuguese");
          printf("<<< EX004 - Listagem >>>\n");
          printf("\nCadastrando a primeira pessoa:\n");
          printf("--------------------------------\n");
          printf("NOME: ");
          fflush(stdin);
          gets(nome1);
          printf("SEXO [M/F]: ");
          fflush(stdin);
          sexo1 = getchar();
          printf("NOTA: ");
          scanf("%f", &nota1);
          printf("\nCadastrando a segunda pessoa:\n");
          printf("------------------------------\n");
          printf("NOME: ");
          fflush(stdin);
          gets(nome2);
          printf("SEXO [M/F]: ");
          fflush(stdin);
          sexo2 = getchar();
          printf("NOTA: ");
          scanf("%f", &nota2);
          printf("\nCadastrando a terceira pessoa:\n");
          printf("-------------------------------\n");
          printf("NOME: ");
          fflush(stdin);
          gets(nome3);
          printf("SEXO [M/F]: ");
          sexo3 = getchar();
          printf("NOTA: ");
          scanf("%f", &nota3);
          printf("\nListagem Completa");
          printf("\n-------------------------------------------\n");
          printf("NOME                     SEXO      NOTA\n");
      
          printf("%-20s", nome1,"\n");
          printf("%8c", sexo1);
          printf(" \t\t\b\b\b\b%.1f",nota1);
          printf("\n%-20s", nome2);
          printf("%8c", sexo2);
          printf(" \t\t\b\b\b\b%.1f", nota2);
          printf("\n%-20s", nome3);
          printf("%8c", sexo3);
          printf(" \t\t\b\b\b\b%.1f", nota3);

      /*Muito bom esse desafio aprendi bastante
      a desenvolver o raciocínio lógico. Esse exercício
      foi bem marcante para mim.
      */

      }

    • #115623
      Tutora Jessica
      Moderador

      Ola Marcio, seu código só esta correto no primeiro cadastro, a partir do segundo ele já não deixa colocar o nome, já vai direto para sexo.
      Veja se consegue resolver , veja os exemplos acima.
      Caso não consiga, retorne ao fórum que vamos tentar lhe ajudar.

    • #115624
      Tutora Jessica
      Moderador

      No fórum tem outras explicações desse exercício também caso prefira.

Visualizando 7 respostas da discussão
  • Você deve fazer login para responder a este tópico.