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