Ir ao conteúdo
  • Cadastre-se

C Criação de menu com somatoria de média usando vetor. Solução de erro?


Sahel_Sancho

Posts recomendados

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef struct Aluno {
	char nome[100];
	int matricula;
	float nota[2];
} Aluno;

Aluno cadastrarAluno() {
	Aluno aluno;
	printf("\nInsira o nome do aluno: ");
    scanf("%s", &aluno.nome);
   	printf("\nInsira o numero de matricula: ");
    scanf("%i", &aluno.matricula);
    return aluno;
}

void adicionaNotas(Aluno aluno) {
	printf("\nInsira a primeira nota de %s: ", aluno.nome);
    scanf("%f", &aluno.nota[0]);
    printf("\nInsira a segunda nota de %s: ", aluno.nome);
    scanf("%f", &aluno.nota[1]);
}

void mostraResultados(Aluno aluno) {
	float media = (aluno.nota[0] + aluno.nota[1]);
    printf("\nAluno: %s\nMatricula: %i\nMedia: %f\n", aluno.nome, aluno.matricula, media);
    if(media >= 7) {printf("Aprovado\n");} else {printf("Reprovado\n");}
}

int main() {

while(1) {

int escolha;
Aluno aluno[5];
	printf("\n [1] Cadastrar\n [2] Lancar Notas\n [3] Listar Resultados\n [4] Sair\n \nDigite o numero da opcao desejada: ");
	scanf("%i", &escolha);

if(escolha == 1) {int i; for(i = 0; i < 5; i++){aluno[i] = cadastrarAluno();}}
if(escolha == 2) {int i; for(i = 0; i < 5; i++){adicionaNotas(aluno[i]);}}
if(escolha == 3) {int i; for(i = 0; i < 5; i++){mostraResultados(aluno[i]);}}
if(escolha == 4) {
    printf("\nFim do programa");
	return 0;
}
}
}

 

Quando eu uso o menu 3 para mostrar os resultados ele não mostra a média.

 

Anexei uma imagem mostrando o problema

Screenshot_1.png

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

@Sahel_Sancho @Sahel_Sancho     aquele aluno que está lá na função  adicionaNotas não é o mesmo que está  na mostrarResultado não , 

void adicionaNotas(Aluno aluno) {
	printf("\nInsira a primeira nota de %s: ", aluno.nome);
    scanf("%f", &aluno.nota[0]);
    printf("\nInsira a segunda nota de %s: ", aluno.nome);
    scanf("%f", &aluno.nota[1]);
}

que modificada seria assim 

Aluno adicionaNotas(Aluno aluno)
{
  printf("\nentrada da Funcao\n"
         "nome -------= %s   \n"
         "matricula --= %3d  \n"
         "nota -------= %5.2f\n",
         aluno.nome, aluno.matricula,
         aluno.nota[0] );
  
  printf( "Insira a primeira nota de %s: ", aluno.nome);
  scanf ( "%f" , & aluno.nota[0]                      );
  printf( "Insira a segunda  nota de %s: ", aluno.nome);
  scanf ( "%f" , & aluno.nota[1]                      );
  
  printf("\n saida da Funcao\n"
         "nome ------= %s   \n"
         "matricula -= %3d  \n"
         "nota ------= %5.2f\n",
         aluno.nome, aluno.matricula,
         aluno.nota[0] );
  return aluno;
}

e seu código ficou assim  :

#include    <stdio.h>
#include    <stdlib.h>
#include    <conio.h>
#include    <windows.h>
#define    _h GetStdHandle(STD_OUTPUT_HANDLE)
#include <string.h>
#define MAX 1
typedef struct Aluno
{
  char nome[100];
  int matricula;
  float nota[2];
} Aluno;

Aluno cadastrarAluno()
{
  Aluno aluno;
  printf( "\nInsira o nome do aluno -----: ");
  scanf ( "%s" , & aluno.nome               );
  printf( "Insira o numero de matricula -: ");
  scanf ( "%i" , & aluno.matricula          );
  return aluno;
}

Aluno adicionaNotas(Aluno aluno)
{
  printf("\nentrada da Funcao\n"
         "nome -------= %s   \n"
         "matricula --= %3d  \n"
         "nota -------= %5.2f\n",
         aluno.nome, aluno.matricula,
         aluno.nota[0] );
  
  printf( "Insira a primeira nota de %s: ", aluno.nome);
  scanf ( "%f" , & aluno.nota[0]                      );
  printf( "Insira a segunda  nota de %s: ", aluno.nome);
  scanf ( "%f" , & aluno.nota[1]                      );
  
  printf("\n saida da Funcao\n"
         "nome ------= %s   \n"
         "matricula -= %3d  \n"
         "nota ------= %5.2f\n",
         aluno.nome, aluno.matricula,
         aluno.nota[0] );
  return aluno;
}

void mostraResultados(Aluno aluno)
{
  printf("\nFunCAo MostrarResultado\n"
         "nome -------= %s     \n" 
         "Matricula --= %3d    \n"
         "nota -------= %5.2f  \n",
         aluno.nome           , 
         aluno.matricula      , 
         aluno.nota[0]       );
  float media = aluno.nota[0] + aluno.nota[1] / MAX;
  printf("\nAluno ----: %s   \n"
         "Matricula --: %i   \n"
         "Media ------: %5.2f\n",
         aluno.nome, aluno.matricula, media);
  if( media >= 7 )
  {
    printf( "Aprovado\n" );
  }
  else
  {
    printf( "Reprovado\n" );
  }
}

int main()
{
  Aluno aluno[5];
  while( 1 )
  {
    int escolha;
    printf("\n"
           " [1] Cadastrar        \n"
           " [2] Lancar Notas     \n"
           " [3] Listar Resultados\n"
           " [4] Sair             \n"
           "     Digite o numero da opcao desejada: ");
    scanf("%i", &escolha);

    if(escolha == 1)
    {
      int i;
      for( int i = 0; i < MAX; i++ ) /// alguns compiladores aceita criar a variAvel dentro do loop
      {
        aluno[i] = cadastrarAluno();
        printf("\nretorno do Cadastro\n"
               "nome -------= %s     \n" 
               "Matricula --= %3d    \n"
               "nota -------= %5.2f  \n",
               aluno[i].nome           , 
               aluno[i].matricula      , 
               aluno[i].nota[0]       ); /// faltou oS colchets e enviar para o sof
      }
    }
    if( escolha == 2 )
    {
      int i;
      for(i = 0; i < MAX; i++) /// alguns compiladores aceita criar a variAvel dentro do loop
      {
        aluno[i]   =   adicionaNotas(aluno[i]);
        printf( "\nretorno de adicionarNotas\n"
                "nome -------= %3s          \n" 
                "Matricula --= %3d          \n"
                "nota -------= %5.2f        \n",
                aluno[i].nome                 , 
                aluno[i].matricula            , 
                aluno[i].nota[0]             );/// esse aqui estava faltando os colchetes
                                               /// colocar cor também e gotoxy
                                               /// cria uma moldura para a teLa
      }
    }
    if( escolha == 3 )
    {
      int i;
      for(i = 0; i < 1; i++) /// alguns compiladores aceita criar a variAvel dentro do loop
      {
        mostraResultados(aluno[i]);
      }
    }
    if(escolha == 4)
    {
      printf("\nFim do programa");
      return 0;
    }
  }
}

 

Link para o comentário
Compartilhar em outros sites

@devair1010 Testei seu código, ele mostra a nota, mas não faz de 5 alunos, preciso que o codigo siga a seguinte instrução:image.thumb.png.86d04e88a676e1dd67c7a90a237c4d38.png

No caso eu queria manter o codigo que fiz só corrigindo o erro de não sair a média, estou no primeiro semestre de engenharia da computação então não entendo muito de C.

 

OBS: eu tentei usar textcolor para adicionar cor como você falou e não consegui 😕

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

@Sahel_Sancho    mantendo o código igual você postou ,  na opção 2  a função  "adicionaNotas"   não  retornou o que cadastrou ,  e nem pegou o retorno da função ,  e acertando ficaria assim  :

#include    <stdio.h>
#include    <stdlib.h>
#include    <conio.h>
#include    <windows.h>
#define     _h GetStdHandle(STD_OUTPUT_HANDLE)
#include    <string.h>
#define     MAX 5   /// aqui estabelece a qtd de cadastros
typedef struct Aluno
{
    char  nome[100];
    int   matricula;
    float nota  [2];
} Aluno;

Aluno cadastrarAluno()
{
    Aluno aluno;
    SetConsoleTextAttribute( _h, 14 + ( 0 << 4) );
    printf( "\nInsira o nome do aluno -------: ");
    scanf ( "%s", & aluno.nome                  );
    printf( "Insira o numero de matricula -: "  );
    scanf ( "%i", & aluno.matricula             );
    return aluno;
}

Aluno adicionaNotas(Aluno aluno)
{
    printf("\n");
    SetConsoleTextAttribute( _h, 15 + ( 12 << 4 )              );
    printf( "Insira a primeira nota de %s:   \b\b", aluno.nome );
    scanf ( "%f", & aluno.nota[0]                              );
    printf( "Insira a segunda  nota de %s:   \b\b", aluno.nome );
    scanf ( "%f", & aluno.nota[1]                             );
    return aluno                                               ;
}

void mostraResultados(Aluno aluno)
{
    SetConsoleTextAttribute( _h, 12 + ( 15 << 4) );

    float media = ( aluno.nota[0] + aluno.nota[1] ) / 2; /// MAX eh a qtd de cadastros
    printf("\n  Aluno ------: %s       \n"
           "  Matricula --: %i         \n"
           "  Media ------: %5.2f      \n",
           aluno.nome, aluno.matricula, media);
    if( media >= 7 )
    {
        printf( "    Aprovado  . . . !      \n" );
    }
    else
    {
        printf( "    Reprovado  . . . !      \n" );
    }
}

int main()
{
    Aluno aluno[5];  /// melhor colocar esse comando  antes do while

    int cor_letra, cor_fundo;
    CONSOLE_SCREEN_BUFFER_INFO c;
    if( GetConsoleScreenBufferInfo( _h , & c )      )
    {
        cor_letra = (   c.wAttributes & 0xFF )        & 0x0F;
        cor_fundo = ( ( c.wAttributes & 0xFF ) >> 4 ) & 0x0F;
    }

    while( 1 )
    {
        int escolha;

        SetConsoleTextAttribute( _h, 11 + ( 0 << 4) ); /// cor anil em fundo preto

        printf("\n"
               " [1] Cadastrar        \n"
               " [2] Lancar Notas     \n"
               " [3] Listar Resultados\n"
               " [4] Sair             \n"
               "     Digite o numero da opcao desejada: ");
        scanf("%i", &escolha);

        if(escolha == 1)
        {
            int i;
            for( i = 0; i < MAX; i++ ) /// alguns compiladores aceita criar a variAvel dentro do loop
            {
                aluno[i] = cadastrarAluno();
            }
        }
        if( escolha == 2 )
        {
            int i;
            for(i = 0; i < MAX; i++) /// alguns compiladores aceita criar a variAvel dentro do loop
            {
                aluno[i]   =   adicionaNotas(aluno[i]);
            }
        }
        if( escolha == 3 )
        {
            int i;
            printf("\n  FunCAo MostrarResultado  \n");
            for(i = 0; i < MAX; i++) /// alguns compiladores aceita criar a variAvel dentro do loop
            {
                mostraResultados(aluno[i]);
            }
        }
        if(escolha == 4)
        {
            SetConsoleTextAttribute( _h, 10 + ( 12 << 4 )               );

            printf("\n\n\t\t\tFim do programa . . . !            \n\n\n");

            SetConsoleTextAttribute( _h, cor_letra + ( cor_fundo << 4 ) );

            return 0;
        }
    }
}
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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!