Ir ao conteúdo

Posts recomendados

Postado
#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
Postado

@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;
    }
  }
}

 

Postado

@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
Postado

@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;
        }
    }
}

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...