
		netinhocqc
		
		(usa Outra)
		
		Enviado em 13/02/2012 - 17:54h 
		estou com dois problemas no código a seguir, na função preencher esta dando um erro na linha de realloc e na linha de lê o nome, idade, e matricula. desde já agradeço.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct cadastro{
        char nome[30];
        int idade;
        int matricula;
}cadastro;
void preencher(cadastro *aluno, int cont);
void imprimir(cadastro *aluno);
void pesquisar(cadastro *aluno);
void criar();
int main(){
    int op;
    FILE *arquivo;
    int cont=0;
    cadastro *aluno;
    aluno = (cadastro *)malloc(sizeof(cadastro)*cont);
    criar();
    printf("\t\t\t\tCadastro de Alunos\n\n");
    do{
       printf("--------------------------------------------------------------------------------\n\n");
       printf("\t\t\t\t(1) - Cadastrar Aluno \n");
       printf("\t\t\t\t(2) - Lista Alunos \n"); 
       printf("\t\t\t\t(3) - Pesquisar Aluno \n");
       printf("\t\t\t\t(4) - Ordenar Lista\n");
       printf("\t\t\t\t(5) - Remover Alunos\n");
       printf("\t\t\t\t(6) - Sair\n\n");
       printf("--------------------------------------------------------------------------------\n\n");
       printf("Digite sua opcao: ");
       scanf("%d",&op);
       switch(op){
              case 1:
                   cont++;
                   preencher(aluno, cont); 
                   break;
              case 2:
                   imprimir(aluno);
                   break;
              case 3:
                   pesquisar(aluno);
                   break;          
              default:
                   printf("Saindo!\n");
       }                              
    }while(op != 6);
    system("pause");
}     
void criar(){
      FILE *arquivo;
      if((arquivo = fopen("Windows.txt","wb")) == NULL){
         exit(0);
     }
     fclose(arquivo);
}
void pesquisar(cadastro *aluno){
     FILE *arquivo;
     char Npesquisa[50];
     fflush(stdin);
     if((arquivo = fopen("Windows.txt","rb")) == NULL){
         exit(0);
     }
      printf("--------------------------------------------------------------------------------\n\n");
     printf("Digite do Aluno que deseja pesquisar: ");
     fgets(Npesquisa,50,stdin); 
     printf("\n");      
     if(fread(&aluno,sizeof(struct cadastro),1,arquivo) != 1){
         exit(0);
         }
     if(strcmp(Npesquisa,aluno->nome) == 0){
        fread(&aluno,sizeof(struct cadastro),1,arquivo);                         
        printf("Nome: %sIdade: %d\nMatricula %d\n",aluno->nome, aluno->idade, aluno->matricula);
     }else{
        printf("Nome nao encontrado\n");
     } 
     fclose(arquivo);    
     printf("--------------------------------------------------------------------------------\n\n");
}        
void imprimir(cadastro *aluno){
      FILE *arquivo;
      if((arquivo = fopen("Windows.txt","rb")) == NULL){
         exit(0);
     }
     while (1) {
    if (fread(&aluno, sizeof (struct cadastro), 1, arquivo) < 1){ 
        break;
    }
    printf("Nome: %sIdade: %d\nMatricula %d\n",aluno->nome, aluno->idade, aluno->matricula);
     }
     fclose(arquivo); 
} 
     
void preencher(cadastro *aluno, int cont){
     FILE *arquivo;
     if(aluno = (cadastro *)realloc(aluno,sizeof(cadastro)*cont) == NULL){
        exit(0);
     }
     if((arquivo = fopen("Windows.txt","ab")) == NULL){
        exit(0);
     }
     for(int i=0; i<cont; i++){
        fflush(stdin);
        printf("Digite o Nome do Aluno: ");
        fgets(aluno->nome,30,stdin);
        printf("Digite a Idade do Aluno: ");
        scanf("%d",&aluno->idade);
        printf("Digite a Matricula do Aluno: ");
        scanf("%d",&aluno->matricula);
        fwrite(&aluno,sizeof(struct cadastro),1,arquivo);
     }
     fclose(arquivo);
}