-
Posts
3 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por meanmatheus
-
-
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 codigo: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; }
-
Eu fiz uma função em C que substitui os acentos que determinada palavra passada pelo parâmetro tem. O código funciona e substitui os caracteres com acento, mas o programa em si é abortado quando executa. Quem puder me ajudar com melhorias ou sugestões eu agradeço. Segue o código:
void retiraAcentos(char str[]) { char *pch; pch = strstr(str,"Á"); if (pch != NULL) strncpy(pch,"A",6); pch = strstr(str,"À"); if (pch != NULL) strncpy(pch,"A",6); pch = strstr(str,"Â"); if (pch != NULL) strncpy(pch,"A",6); pch = strstr(str,"Ã"); if (pch != NULL) strncpy(pch,"A",6); pch = strstr(str,"Ä"); if (pch != NULL) strncpy(pch,"A",6); pch = strstr(str,"É"); if (pch != NULL) strncpy(pch,"E",6); pch = strstr(str,"È"); if (pch != NULL) strncpy(pch,"E",6); pch = strstr(str,"Ê"); if (pch != NULL) strncpy(pch,"E",6); pch = strstr(str,"Ë"); if (pch != NULL) strncpy(pch,"E",6); pch = strstr(str,"Í"); if (pch != NULL) strncpy(pch,"I",6); pch = strstr(str,"Ì"); if (pch != NULL) strncpy(pch,"I",6); pch = strstr(str,"Î"); if (pch != NULL) strncpy(pch,"I",6); pch = strstr(str,"Ï"); if (pch != NULL) strncpy(pch,"I",6); pch = strstr(str,"Ó"); if (pch != NULL) strncpy(pch,"O",6); pch = strstr(str,"Ò"); if (pch != NULL) strncpy(pch,"O",6); pch = strstr(str,"Ô"); if (pch != NULL) strncpy(pch,"O",6); pch = strstr(str,"Õ"); if (pch != NULL) strncpy(pch,"O",6); pch = strstr(str,"Ö"); if (pch != NULL) strncpy(pch,"O",6); pch = strstr(str,"Ú"); if (pch != NULL) strncpy(pch,"U",6); pch = strstr(str,"Ù"); if (pch != NULL) strncpy(pch,"U",6); pch = strstr(str,"Û"); if (pch != NULL) strncpy(pch,"U",6); pch = strstr(str,"Ü"); if (pch != NULL) strncpy(pch,"U",6); pch = strstr(str,"Ç"); if (pch != NULL) strncpy(pch,"C",6); }
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais
erro ao cadastrar uma disciplina na lista de um aluno
em C/C#/C++
Postado
@arfneto Eu dei uma arrumada no código, e agora eu consigo cadastrar uma disciplina do aluno e as avaliações da disciplina cadastrada, mas na hora de excluir um aluno ou uma disciplina do aluno a minha lógica não está dando certo. Se puder dar uma olhadinha, segue o código:
aluno.h
disciplina.h
disciplinas.c
aluno.c
main.c