LucasRafael Postado Setembro 27, 2010 Denunciar Share Postado Setembro 27, 2010 Bom diaBom dia GaleraEstou com o seguinte problema...Estou criando um programa em que existe as estruturas Aluno e Disciplina.Na estrutura Aluno existe um ponteiro que aponta para o inicio das disciplinas do aluno.Esta dando um erro do windows que o programa parou de funcionar, após cadastrar a disciplina para o aluno.Eu acredito que o erro esteja na passagem de parametro do ponteiro "piniciodisciplina"Segue codigo Fonte:struct disciplina { int codigod, n_creditos, periodod; char nomed[50]; struct disciplina *prox; }; struct aluno //Declaração da estrutura aluno { int codigo;//Atributos da estrutura aluno char nome[50], endereco[50], curso[50], periodo[50]; struct aluno *proximo; struct disciplina *piniciodisciplina; }; aluno al; disciplina di; struct disciplina *pinicio; struct aluno *inicio; void cadastra_disciplina(){ int codigo, codigod; printf("\n*************** Cadastro de Disciplinas ***************\n\n\n"); fflush(stdin); printf("Digite o codigo do Aluno: "); scanf("%d", &codigo); fflush(stdin); printf("\nDigite o Codigo da Disciplina: "); scanf("%d", &codigod); fflush(stdin); printf("\nDigite o Nome: "); gets(di.nomed); fflush(stdin); printf("\nDigite o Periodo: "); scanf("%d", &di.periodod); fflush(stdin); printf("\nDigite o Numeros de Creditos: "); scanf("%d", &di.n_creditos); fflush(stdin); struct aluno *aux; aux = inicio; while(aux != NULL) //Busca Aluno Para Cadastrar Disciplina { if(aux->codigo == codigo) insereOrdenado_Disciplina(codigod, &(aux->piniciodisciplina)); } } void insereOrdenado_Disciplina(int codigod, struct disciplina **piniciodisciplina) { struct disciplina *p, *q; p = *piniciodisciplina; if((p == NULL)||(codigod < p->codigod)) { insereInicio_Disciplina(codigod, piniciodisciplina); return; } q = p; while((q!=NULL) && (q->codigod < codigod)) { p=q; q = p->prox; } if((q == NULL) || (q->codigod > codigod)) insereDepois_Disciplina(p, codigod); else printf("\nElemento já Existe"); } void insereInicio_Disciplina(int codigod, struct disciplina **piniciodisciplina) { struct disciplina *d; d =(struct disciplina *)malloc(sizeof(struct disciplina)); fflush(stdin); d->codigod = codigod; strcpy(d->nomed, di.nomed); d->n_creditos = di.n_creditos; d->periodod = di.periodod; fflush(stdin); system("cls"); //Limpa a Tela d->prox = *piniciodisciplina; *piniciodisciplina = d; printf("Disciplina Inserida com sucesso"); getch(); system("cls"); //Limpa a Tela } void insereDepois_Disciplina(struct disciplina *p, int codigod) { struct disciplina *aux; aux=(struct disciplina *)malloc(sizeof(struct disciplina)); aux ->codigod = codigod; fflush(stdin); printf("\nDigite o Nome: "); gets(aux->nomed); fflush(stdin); printf("\nDigite o Periodo: "); scanf("%d", &aux->periodod); fflush(stdin); printf("\nDigite o Numeros de Creditos: "); scanf("%d", &aux->n_creditos); fflush(stdin); system("cls"); //Limpa a Tela aux ->prox = p->prox; p->prox = aux; printf("\n\n\nDisciplina Inserida com sucesso"); getch(); system("cls"); //Limpa a Tela } void percorreLista() //Faz a listagem de todas matriculas da Estrutura, e as imprimem { struct aluno *p; struct disciplina *d; p = inicio; printf("\n*************** Alunos Matriculados ***************\n\n\n"); while(p != NULL) { fflush(stdin); printf("Codigo = %d \n\n", p->codigo); fflush(stdin); printf("Nome = %s\n\n" ,p->nome); fflush(stdin); printf("Endereco = %s \n\n" , p->endereco); fflush(stdin); printf("Curso = %s \n\n", p->curso); fflush(stdin); printf("Periodo = %s \n\n", p->periodo); fflush(stdin); d = pinicio; while(d != NULL) { printf("\n*************** Disciplinas Cadastradas ***************\n\n\n"); printf("Codigo: %d \n\n" , d->codigod); printf("Nome: %s \n\n" , d->nomed); printf("Periodo: %d \n\n" , d->periodod); printf("Numero de Creditos: %d \n\n\n\n" , d->n_creditos); printf("____________________________________________________________"); d = d->prox; } p = p->proximo; } getch(); system("cls"); //Limpa a Tela }Muito Obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Setembro 27, 2010 Denunciar Share Postado Setembro 27, 2010 Se possível poste o código completo do arquivo, incluindo a função main. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucasRafael Postado Setembro 28, 2010 Autor Denunciar Share Postado Setembro 28, 2010 Segue codigo completo#include <stdio.h> #include <conio.h> #include <string.h> #include <math.h> #include <stdlib.h> struct disciplina { int codigod, n_creditos, periodod; char nomed[50]; struct disciplina *prox; }; struct aluno //Declaração da estrutura aluno { int codigo, pro, iniciolista2;//Atributos da estrutura aluno char nome[50], endereco[50], curso[50], periodo[50]; struct aluno *proximo; struct disciplina *piniciodisciplina; }; aluno al; disciplina di; struct disciplina *pinicio; struct aluno *inicio; //Primeiro Matricula FILE *arq; //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //SubRotinas Utilizadas //Aluno void insereInicio(int codigo); void removeInicio(); void insereDepois(struct aluno *a, int codigo); void remove_depois(struct aluno *a); void percorreLista(); void insereOrdenado(int codigo); void remove_ordenado(int codigo); //Disciplina void insereInicio_Disciplina(int codigod, struct disciplina **auxpiniciodisciplina); void insereDepois_Disciplina(struct disciplina *p, int codigod); void removeInicio_Disciplina(); void removeDepois_Disciplina(struct disciplina *p); void insereOrdenado_Disciplina(int codigod, struct disciplina **auxpiniciodisciplina); void remove_ordenado_Disciplina(int codigo, int codigod); void cadastra(); void cadastra_disciplina(); //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// main(){ int x = 1, codigo, codigod; while(x != 0) { printf("\n*************** Matricula de Aluno ***************\n\n\n"); //Menu printf("Para cadastrar um novo aluno.....................Digite 1:\n\n"); printf("Para imprimir a lista de alunos..................Digite 2:\n\n"); printf("Para remover um Aluno............................Digite 3:\n\n"); printf("Para adicionar uma Disciplina para um aluno......Digite 4:\n\n"); printf("Para remover uma Disciplina......................Digite 5:\n\n"); printf("Para sair........................................Digite 0:\n\n"); printf("Escolha: "); scanf("%d", &x); system("cls"); //Limpa a Tela if(x == 1) //Insere um novo cadastro ordenadamente cadastra(); if(x == 2)//Imprime a lista de alunos percorreLista(); if(x == 3)// Remove Aluno { printf("Digite o codigo: "); //Remova o aluno pelo codigo scanf("%d", &codigo); remove_ordenado(codigo); } if(x == 4)//Adiciona uma Disicplina cadastra_disciplina(); if(x == 5)//Remove Uma Disciplna { printf("Digite o Codigo do Aluno"); scanf("%d", &codigo); printf("\nDigite o codigo: "); scanf("%d", &codigod); remove_ordenado_Disciplina(codigo, codigod); } if(x == 0)// Sair { system("cls"); //Limpa a Tela printf("\n\nPressione qualquer tecla para sair...."); getch(); } if(x != 0 && x != 1 && x != 2 && x != 3 && x != 4 && x != 5) //Verifica se foi digitado um valor valido de 1 a 7 { system("cls"); //Limpa a Tela printf("\n\nValor Invalido!\n\nDigite Novamente\n\n"); } }//Fim do While }//Fim do Main //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// void insereInicio(int codigo){// Insere um novo Aluno no ínicio da Fila, Passando todos atributos por referência struct aluno *aux; aux =(struct aluno*)malloc(sizeof(struct aluno)); //Aloca Espaço na Memoria fflush(stdin); //Definindo atributos com base na chave código aux->codigo = codigo; strcpy(aux->nome, al.nome); strcpy(aux->endereco, al.endereco); strcpy(aux->curso, al.curso); strcpy(aux->periodo, al.periodo); system("cls"); //Limpa Tela aux->proximo = inicio; inicio = aux; printf("Aluno Inserido com sucesso"); getch(); system("cls"); //Limpa a Tela printf("\n\nPressione qualquer tecla para voltar ao menu"); getch(); system("cls"); //Limpa a Tela } void removeInicio(){ // Remove o primeiro registro struct aluno *aux; aux = inicio; inicio = inicio->proximo; free(aux); printf("Aluno removido com sucesso"); system("cls"); //Limpa a Tela printf("\n\nPressione qualquer tecla para voltar ao menu"); getch(); } //////////////////////////////////////////////////////////////////////////////// void insereDepois(struct aluno *a, int codigo){ //Insere uma matrícula após outra matrícula específica struct aluno *aux,c; aux =(struct aluno*)malloc(sizeof(struct aluno)); //Aloca Espaço na Memoria //Definindo atributos com base na chave código aux->codigo = codigo; //Insere Codigo na Estrutura aluno strcpy(aux->nome, al.nome); strcpy(aux->endereco, al.endereco); strcpy(aux->curso, al.curso); strcpy(aux->periodo, al.periodo); system("cls"); aux->proximo = a->proximo; a->proximo = aux; printf("Aluno Inserido com sucesso"); getch(); system("cls"); //Limpa a Tela } void remove_depois(struct aluno *a){ // Remove uma matrícula após outra matrícula específica struct aluno *aux; aux = a->proximo; a->proximo = aux->proximo; free(aux); printf("Aluno removido com sucesso"); getch(); system("cls"); //Limpa a Tela } //////////////////////////////////////////////////////////////////////////////// void percorreLista() //Faz a listagem de todas matriculas da Estrutura, e as imprimem { struct aluno *p; struct disciplina *d; p = inicio; printf("\n*************** Alunos Matriculados ***************\n\n\n"); while(p != NULL) { fflush(stdin); printf("Codigo = %d \n\n", p->codigo); fflush(stdin); printf("Nome = %s\n\n" ,p->nome); fflush(stdin); printf("Endereco = %s \n\n" , p->endereco); fflush(stdin); printf("Curso = %s \n\n", p->curso); fflush(stdin); printf("Periodo = %s \n\n", p->periodo); fflush(stdin); d = pinicio; while(d != NULL) { printf("\n*************** Disciplinas Cadastradas ***************\n\n\n"); printf("Codigo: %d \n\n" , d->codigod); printf("Nome: %s \n\n" , d->nomed); printf("Periodo: %d \n\n" , d->periodod); printf("Numero de Creditos: %d \n\n\n\n" , d->n_creditos); printf("____________________________________________________________"); d = d->prox; } p = p->proximo; } getch(); system("cls"); //Limpa a Tela } //////////////////////////////////////////////////////////////////////////////// void insereOrdenado(int codigo) /*Insere um valor na lista de alunos de acordo com seu código*/ { struct aluno *p, *q; p = inicio; if((p == NULL)||(codigo < p->codigo)) { insereInicio(codigo); return; } q = p; while((q != NULL) && (q->codigo < codigo)) { p = q; q = p->proximo; } if((q == NULL) || (q->codigo > codigo)) insereDepois(p,codigo); else printf("\nElemento já Existe"); } //////////////////////////////////////////////////////////////////////////////// void remove_ordenado(int codigo) { struct aluno *p, *q; p = inicio; if (p == NULL) { printf("\n\nLista Vazia!"); getch(); system("cls"); //Limpa a Tela return; } if (codigo == p->codigo) { removeInicio(); return; } q = p; while(q != NULL && q->codigo < codigo) { p = q; q = p->proximo; } if (q!=NULL && q->codigo == codigo) remove_depois(p); else { printf("\n\nElemento não Cadastrado!"); getch(); system("cls"); //Limpa a Tela } } //////////////////////////////////////////////////////////////////////////////// void insereInicio_Disciplina(int codigod, struct disciplina **piniciodisciplina) { struct disciplina *d; d =(struct disciplina *)malloc(sizeof(struct disciplina)); fflush(stdin); d->codigod = codigod; strcpy(d->nomed, di.nomed); d->n_creditos = di.n_creditos; d->periodod = di.periodod; fflush(stdin); system("cls"); //Limpa a Tela d->prox = *piniciodisciplina; *piniciodisciplina = d; printf("Disciplina Inserida no inicio com sucesso"); getch(); system("cls"); //Limpa a Tela } //////////////////////////////////////////////////////////////////////////////// void insereDepois_Disciplina(struct disciplina *p, int codigod) { struct disciplina *aux; aux=(struct disciplina *)malloc(sizeof(struct disciplina)); aux ->codigod = codigod; fflush(stdin); printf("\nDigite o Nome: "); gets(aux->nomed); fflush(stdin); printf("\nDigite o Periodo: "); scanf("%d", &aux->periodod); fflush(stdin); printf("\nDigite o Numeros de Creditos: "); scanf("%d", &aux->n_creditos); fflush(stdin); system("cls"); //Limpa a Tela aux ->prox = p->prox; p->prox = aux; printf("\n\n\nDisciplina Inserida depois com sucesso"); getch(); system("cls"); //Limpa a Tela } //////////////////////////////////////////////////////////////////////////////// void removeInicio_Disciplina(int codigo) { struct disciplina *aux; struct aluno *p; p = inicio; while(p != NULL) { if(p->codigo == codigo) break; } aux = p->piniciodisciplina; p->piniciodisciplina=(p->piniciodisciplina)->prox; free(aux); printf("Disciplina Removida com sucesso"); getch(); system("cls"); //Limpa a Tela } //////////////////////////////////////////////////////////////////////////////// void removeDepois_Disciplina(struct disciplina *p) { struct disciplina *aux; aux = p->prox; p->prox = aux->prox; free(aux); printf("Disciplina Removida com sucesso"); getch(); system("cls"); //Limpa a Tela } //////////////////////////////////////////////////////////////////////////////// void percorreLista_Disciplina(int codigo) { struct aluno *aux; while(aux != NULL) { if(aux->codigo = codigo) break; } struct disciplina *p; p = aux->piniciodisciplina; printf("***********Disciplinas Cadastradas**********\n"); while(p != NULL) { printf("\n\nCodigo: %d \n\n" , p->codigod); printf("Nome: %s \n\n" , p->nomed); printf("Periodo: %d \n\n" , p->periodod); printf("Numero de Creditos: %d \n\n\n\n" , p->n_creditos); printf("____________________________________________________________"); p = p->prox; } getch(); system("cls"); //Limpa a Tela } //////////////////////////////////////////////////////////////////////////////// void insereOrdenado_Disciplina(int codigod, struct disciplina **piniciodisciplina) { struct disciplina *p, *q; p = *piniciodisciplina; if((p == NULL)||(codigod < p->codigod)) { insereInicio_Disciplina(codigod, piniciodisciplina); return; } q = p; while((q!=NULL) && (q->codigod < codigod)) { p=q; q = p->prox; } if((q == NULL) || (q->codigod > codigod)) insereDepois_Disciplina(p, codigod); else printf("\nElemento já Existe"); } //////////////////////////////////////////////////////////////////////////////// void remove_ordenado_Disciplina(int codigo, int codigod) { struct disciplina *p,*q; p = pinicio; if (p==NULL) { printf("lista vazia"); getch(); return; } if (codigod == p->codigod) { removeInicio_Disciplina(codigo); return; } q = p; while (q !=NULL && q->codigod < codigod ) { p = q; q = p->prox; } if (q != NULL && q->codigod == codigod) removeDepois_Disciplina(p); else { printf("\nElemento não Cadastrado"); getch(); } } //////////////////////////////////////////////////////////////////////////////// void cadastra(){ int codigo; struct aluno *x; printf("\n*************** Matricula de Aluno ***************\n\n\n"); fflush(stdin); printf("Digite o codigo: "); scanf("%d", &codigo); fflush(stdin); printf("Digite o Nome: "); gets(al.nome); //Insere Nome na Estrutura aluno fflush(stdin); printf("Digite o Curso: "); gets(al.curso); //Insere Curso na Estrutura aluno fflush(stdin); printf("Digite o Endereco: "); gets(al.endereco); //Insere Endereço na Estrutura aluno fflush(stdin); printf("Digite o Periodo: "); gets(al.periodo); //Insere Periodo na Estrutura aluno fflush(stdin); insereOrdenado(codigo); } void cadastra_disciplina(){ int codigo, codigod; printf("\n*************** Cadastro de Disciplinas ***************\n\n\n"); fflush(stdin); printf("Digite o codigo do Aluno: "); scanf("%d", &codigo); fflush(stdin); printf("\nDigite o Codigo da Disciplina: "); scanf("%d", &codigod); fflush(stdin); printf("\nDigite o Nome: "); gets(di.nomed); fflush(stdin); printf("\nDigite o Periodo: "); scanf("%d", &di.periodod); fflush(stdin); printf("\nDigite o Numeros de Creditos: "); scanf("%d", &di.n_creditos); fflush(stdin); struct aluno *aux; aux = inicio; while(aux != NULL) //Busca Aluno Para Cadastrar Disciplina { if(aux->codigo == codigo) insereOrdenado_Disciplina(codigod, &(aux->piniciodisciplina)); } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
LucasRafael
Bom dia
Bom dia Galera
Estou com o seguinte problema...
Estou criando um programa em que existe as estruturas Aluno e Disciplina.
Na estrutura Aluno existe um ponteiro que aponta para o inicio das disciplinas do aluno.
Esta dando um erro do windows que o programa parou de funcionar, após cadastrar a disciplina para o aluno.
Eu acredito que o erro esteja na passagem de parametro do ponteiro "piniciodisciplina"
Segue codigo Fonte:
Muito Obrigado
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.