Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

sarcofagobra

Problema com STRUCT e alocação

Recommended Posts

O exercício é o seguinte:

Crie uma estrutura que represente os dados de um

aluno, possuindo os campos nome, nota.

Em seguida, peça ao usuário para informar a

quantidade de alunos que deseja entrar e solicite o

nome e a nota de cada aluno e armazene-os em

um vetor. Após a entrada de dados, o sistema

deverá informar a situação do aluno (aprovado, se

nota>=7 e reprovado se nota < 7). Como saída, o

sistema deverá exibir as informações de todos os

alunos.

 

Na parte de alocar ou realocar o vetor dados da struct, não sei como fazer, fiz com sizeof mas não sei se tá certo,

já tentei com realloc e malloc e todos dão erro... Alguém pode ver se está certo, ou se estiver errado me dizer como posso modificá-lo?

 

 

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

struct Aluno {
      char nome[100];
      float nota;
      };

main(){
  int qaluno;
  Aluno dados[1];

  printf("Informe a quantidade de alunos==> ");
   scanf("%d", &qaluno);

   dados[sizeof(qaluno)]; //aki ele estaria realocando o vetor dados que é um vetor de struct?



     for(int i=0;i<qaluno;i++){

  printf("\nAluno %d\n", i+1);
  fflush(stdin);
  printf("\nInforme o nome: ");
  gets(dados[i].nome);

  printf("\nInforme a nota: ");
  scanf("%f",&dados[i].nota);
  }
  system("cls");

  printf("---SITUACAO DOS ALUNOS---\n\n");

     for(int i=0;i<qaluno;i++){

  printf("\n\nAluno %d\n", i+1);
  printf("\nNome: %s",dados[i].nome);
  printf("\nNota: %2.2f", dados[i].nota);

   if(dados[i].nota >=7){
          printf("\nAluno Aprovado.");
          }
   else {
  printf("\nAluno reprovado.");              
  }         
}
free(ptr);         
  getch();    
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra que malloc ou realloc se ele pediu pra colocar num vetor?

 

Esses dados não teriam que ser armazenados no vetor da struct? Que no caso ai seria "dados[]", o exercício fala pra armazenar em um vetor, mas fiquei na dúvida por causa da struct. Não sei se tenho que armazenar em um vetor qualquer ou criar um vetor pra struct e armazenar nele, já que vo manipular os dados da struct. Tomara que você tenha entendido, não entendo bem de struct ainda...

 

Odeio struct :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

A seguinte linha não faz sentido:

 

dados[sizeof(qaluno)]; //aki ele estaria realocando o vetor dados que é um vetor de struct?

 

sizeof(qaluno) é o mesmo que sizeof (qaluno), que é o mesmo que sizeof qaluno, que é o mesmo que sizeof (int). A linha acima não faz sentido: ela tenta computar o valor do sizeof-(int)-ésimo elemento do array dados.

 

Se você estiver querendo resolver o exercício em C, a declaração do vetor dados é inválida. O nome do tipo da struct é struct Aluno.

 

int qalunos = 10; // ou ler via scanf, fgets + sscanf, etc
// ...
struct Aluno dados[qalunos]; 

 

Acima, cria-se um vetor de qalunos elementos, cada um de tipo struct Aluno, e associa-se a ele o identificador dados. O tipo do vetor criado é vetor de 10 struct Alunos.

 

Não passe buffers de entrada para fflush. Isto gera comportamento indefinido. Para saber mais sobre os tipos de comportamento em C, leia este post no meu blog: http://guipn.com/blog/?p=161

 

Não use gets. Ela gera comportamento indefinido caso o número de bytes lidos seja maior que o tamanho do seu buffer.

 

Além disso, ptr não foi declarado.

 

Sugiro que leia um bom livro sobre C. Qualquer um dos listados aqui é recomendado: http://www.iso-9899.info/wiki/Books -- preferivelmente, compre a segunda edição do The C Programming Language, popularmente conhecido como 'K&R'.

 

Para entender ponteiros e arrays, sugiro que leia: http://guipn.com/cpa.htm

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.