Ir para conteúdo
Fórum Script Brasil
  • 0

erro ao cadastrar uma disciplina na lista de um aluno


meanmatheus

Pergunta

Eu estou fazendo um cadastro escolar onde eu crio uma lista duplamente encadeada circular para inserir os alunos, e uma lista simplesmente encadeada para inserir uma disciplina do aluno.
Na parte de cadastrar aluno deu tudo certo, mas na hora de inserir a lista de disciplina na lista do aluno selecionado da erro. Quem puder me ajudar eu agradeço.
Segue o código:

aluno.h

#ifndef ALUNO_H_INCLUDED
#define ALUNO_H_INCLUDED

typedef struct DisciplinasListas {
    char nome[100];
    struct DisciplinasListas * prox;
}Disciplina;

struct AlunosLista{
    char nome[100], dataNascimento[11],matricula[10];
    Disciplina * disciplinas;
    struct AlunosLista * next;
    struct AlunosLista * prev;
};

void cadastrarAluno();
void imprimirLista();
void cadastrarDisciplinas();
struct AlunosLista * buscaAluno(char *);

#endif


main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "aluno.h"

typedef struct AlunosLista node;
node *head = NULL, *tail = NULL;

void cadastrarAluno() {
    node *newNode = (node *) malloc(sizeof(node));
    printf("\nForneca a matricula: ");
    fgets(newNode->matricula,10,stdin);
    setbuf(stdin,NULL);
    printf("\nForneca o nome: ");
    fgets(newNode->nome,100,stdin);
    setbuf(stdin,NULL);
    printf("\nForneca a data de nascimento: ");
    fgets(newNode->dataNascimento,11,stdin);
    setbuf(stdin,NULL);
    newNode->disciplinas=NULL;

    newNode->next = newNode;
    newNode->prev = newNode;

    if(head==NULL) {
        head = newNode;
        tail = newNode;
    } else {
        tail->next = newNode;
        newNode->next = head;
        newNode->prev = tail;
        tail = newNode;
        head->prev = tail;
    }
}

void imprimirLista() {
    if(head==NULL)  return;
    node *current = head;
    do {
        printf("\n%s", current->matricula);
        Disciplina *currentDisc = current->disciplinas;
        do {
            printf("\n%s", currentDisc->nome);
            currentDisc = currentDisc->prox;
        } while(currentDisc != current->disciplinas);
        current = current->next;
    }   while(current != head);
}

struct AlunosLista * buscaAluno(char matricula[]) {
    if(head==NULL)  return;
    node *current = head;
    do {
        if(!strcmp(current->matricula,matricula)) {
            return current;
            current = current->next;
        }
    }   while(current != head);
    return 0;
}

void cadastrarDisciplinas() {
    char disciplina[100], matricula[10];
    if(head==NULL)  return;

    printf("\nForneça a matricula do aluno:");
    fgets(matricula,10,stdin);
    setbuf(stdin,NULL);
    struct AlunosLista *busca = buscaAluno(matricula);
    if(busca!=0) {
        printf("\nForneça o nome da disciplina:");
        fgets(disciplina,100,stdin);
        setbuf(stdin,NULL);
        node *current = head;
        do {
            if(current==busca) {
                if (!strcmp(current->matricula,matricula)) {
                    Disciplina * lDisciplina = (Disciplina *)malloc(sizeof(Disciplina));
                    strcpy(lDisciplina->nome,disciplina);
                    lDisciplina->prox = current->disciplinas;
                    current->disciplinas->prox = lDisciplina;
                    break;
                }
            }
            current = current->next;
        }   while(current != head);

    } else
        printf("\nAluno inexistente!!!");
}

int main(){
    int opcao;
    do{
        printf("\n1-cadastrar aluno");
        printf("\n2-cadastrar disciplinas do aluno");
        printf("\n3-listar");
        printf("\n4-sair");
        printf("\nForneca a sua opcao: ");
        scanf("%d",&opcao);
        setbuf(stdin,NULL);
        switch(opcao){
            case 1:
                cadastrarAluno();
                break;
            case 2:
                cadastrarDisciplinas();
                break;
            case 3:
                imprimirLista();
                break;
        }
    }while(opcao!=4);
    return 0;
}


 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...